[实验任务]
完成以下描述算术表达式的LL(1)文法的递归下降分析程序
G[E]:
E→TE′
E′→ATE′|ε
T→FT′
T′→MFT′|ε
F→ (E)|i
A→+|-
M→*|/
说明:终结符号i为用户定义的简单变量,即标识符的定义。
[设计要求]
1、 输入串应是词法分析的输出二元式序列,即某算术表达式“实验项目一”的输出结果。输出为输入串是否为该文法定义的算术表达式的判断结果。
2、 递归下降分析程序应能发现输入串出错。
3、 设计两个测试用例(尽可能完备,正确和出错),并给出测试结果。
demo.cpp
bool E() { if (T()) { if (E_prime()) { return true; } } return false; } bool E_prime() { if (A()) { if (T()) { if (E_prime()) { return true; } else return false; } else return false; } return true; } bool T() { if (F()) { if (T_prime()) { return true; } } return false; } bool T_prime() { if (M()) { if (F()) { if (T_prime()) { return true; } else return false; } else return false; } return true; } bool F() { if (a == '(') { advance(); if (E()) { if (a == ')') { advance(); return true; } } } else if (a == 'i') { advance(); return true; } return false; } bool A() { if (a == '+') { advance(); return true; } else if (a == '-') { advance(); return true; } return false; } bool M() { if (a == '*') { advance(); return true; } else if (a == '/') { advance(); return true; } return false; } |