一个计算器的C语言实现
来源:互联网 发布:淘宝店铺刷钻多少钱 编辑:程序博客网 时间:2024/04/29 21:49
今天在读《编译原理及实践》时,看到了一个简单的整数计算器的实现。
按照书上的思路,我稍微进行了扩展:
1、从整数计算器扩展到小数计算器。
2、支持除法
3、支持空字符。
运行效果如下:
代码很简单,如下:
cal.c:
#include <stdio.h>#include <stdlib.h>char token;double exp(void);double term(void);double factor(void);char getPrintableChar(void);void match(char expectedToken);void error(void);int main(void){double result;for (;;){token = getPrintableChar();if (token == 'q')break;result = exp();if (token == '\n')printf("Result is: %g\n", result);elseerror();}return 0;}double exp(void){double temp = term();while (token == '+' || token == '-')switch(token){case '+': match('+'); temp += term(); break;case '-': match('-'); temp -= term(); break;}return temp;}double term(void){double temp = factor();while (token == '*' || token == '/')switch(token){case '*': match('*'); temp *= factor(); break;case '/': match('/'); temp /= factor(); break;}return temp;}double factor(void){double temp;if (token == '('){match('(');temp = exp();match(')');} else if (isdigit(token)){ungetc(token, stdin);scanf("%lf", &temp);token = getPrintableChar();} elseerror();return temp;}void error(void){fprintf(stderr, "Error!\n");exit(EXIT_FAILURE);}void match(char expectedToken){if (expectedToken == token)token = getPrintableChar();elseerror();}char getPrintableChar(void){char temp;dotemp = getchar();while (isblank(temp));return temp;}
程序实现的思路是按照EBNF规则实现,即:
<exp> -> <term> { <addop> <term> }<addop> -> + | -<term> -> <factor> { <mulop> <factor> }<mulop> -> * | /<factor> -> ( <exp> ) | Number
关于EBNF, 可以参考书上的内容,在这里就不赘述了。
0 1
- C语言实现一个简单的计算器
- 一个计算器的C语言实现
- 用C语言实现一个简单的计算器代码
- 用C语言实现一个计算器
- 一个简单的计算器(C语言)
- 用C语言写一个的计算器
- 【c语言】一个简单的计算器
- C语言写的一个简易计算器
- C语言-一个简单的计算器。。。。。
- c语言实现计算器
- C语言实现计算器
- C语言实现的高精度计算器
- 用C语言实现的计算器
- 一个用C实现的科学计算器
- linux下面用C语言设计实现一个计算器
- 【C语言】使用main函数的参数,实现一个整数计算器
- c语言:使用main函数的参数,实现一个整数计算器
- C语言模块化开发简单实例——实现一个计算器的加减乘除
- Lucene入门的基本知识(二)
- java 10.16
- git pull学习笔记
- 黑马程序员-----java文件的复制操作合集
- IT男在深圳--求生存篇
- 一个计算器的C语言实现
- <图形图像,动画,多媒体> 读书笔记 --- AirPlay
- Spring构造注入
- Where my journey starts
- Pomelo介绍
- shell 文件拷贝
- 技术与业务闲谈
- 中国大学教师学术水平排行榜
- Java I/O全文摘要(十)过滤流,压缩流