一个简单的自顶向下语法分析(表达式求值)
2010-07-14 10:23
513 查看
//一个简单的自顶向下语法分析 #include <cassert> #include <cstdio> using namespace std; char str[1024]; long curpos; int num() { int ret; if (str[curpos] >= '0' && str[curpos] <= '9') { ret = str[curpos] - '0'; ++curpos; return ret; } printf("ERROR!not a num.pos=%d/r/n", curpos); assert(0); return 0; } void match(int c) { if (str[curpos] == c) { ++curpos; return; } printf("ERROR!not =%c/r/n", c); assert(0); } int A(); int C() { int ret; if (str[curpos] == '(') { match('('); ret = A(); match(')'); } else { ret = num(); } return ret; } int B(); void B2(int& token, int& num) { if (str[curpos] == '*') { match('*'); token = '*'; num = B(); } else { token = 0; } } int B() { int ret = C(); int token, num; B2(token, num); if (token == '*') { return ret * num; } else if (token == '/') { return ret / num; } else { return ret; } } void A2(int& token, int& num) { if (str[curpos] == '+') { match('+'); token = '+'; num = A(); } else if (str[curpos] == '-') { match('-'); token = '-'; num = A(); } } int A() { int token, num; int ret = B(); A2(token, num); if (token == '+') { return ret + num; } else if (token == '-') { return ret - num; } else { return ret; } } int main() { printf("请输入表达式:/r/n"); for (; ;) { scanf("%s", &str); curpos = 0; printf("结果为:%d/r/n", A()); match(0); printf("Corrent!/r/n"); } return 0; }
相关文章推荐
- 自顶向下分析一个简单的语音识别系统(三)
- 自顶向下分析一个简单的语音识别系统(五)
- 一个简单的HTML语法分析类
- Redy语法分析--一个简单的四则运算计算器
- 【龙书笔记】用Python实现一个简单数学表达式从中缀到后缀语法的翻译器(采用递归下降分析法)
- 编译原理之表达式语法分析(一)——自顶向下
- 自顶向下分析一个简单的语音识别系统(八)
- (3) 用java编译器实现一个简单的编译器-语法分析
- 自顶向下分析一个简单的语音识别系统(二)
- 自顶向下分析一个简单的语音识别系统(六)
- 自顶向下分析一个简单的语音识别系统(七)
- 自顶向下分析一个简单的语音识别系统(九)
- 自顶向下分析一个简单的语音识别系统(一)
- 自顶向下分析一个简单的语音识别系统(十)
- 简单语法分析-数学表达式
- 利用编译原理中的语法分析进行表达式求值
- 自顶向下分析一个简单的语音识别系统(四)
- 可视化数据分析(二) 一个简单的柱状图的实现
- 一个 Linux 上分析死锁的简单方法
- 一个简单进程调度器的实现和分析