您的位置:首页 > 其它

编译原理实验三——语法分析(递归下降法)

2006-05-31 22:18 555 查看
[实验任务]
完成以下描述算术表达式的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;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: