1.针对算术表达式文法:
E→TE’
E’ → +TE’|ε
T→FT’
T’ →*FT’ |ε
F→(E) |i
为其编写递归下降子程序,判定某个算术表达式是否正确:如j+k*m,j*k+m
输入:其输入数据应该为词法分析器输出的记号形式:i+i*i,i*i+i
输出:分析结果:算术表达式结构正确或结构错误。
[评论可见]隐藏内容 - 管理员可见
#include <iostream>
using namespace std;
char token[100];
int localhead = 0;
void E();
void E_();
void T();
void T_();
void F();
void match(char local);
void error();
int main() {
char ch;
int i = 0;
cout << "请输入:";
cin >> token;
E();
if(localhead!=strlen(token)){
error();
}
return 0;
}
void match(char local) {
if (token[localhead] == local) {
localhead++;
} else {
error();
}
}
void E() {
cout << "E->TE'" << endl;
T();
E_();
}
void E_() {
if (token[localhead] == '+') {
cout << "E'->+TE'" << endl;
match('+');
T();
E_();
} else {
cout << "E'->ε" << endl;
}
}
void T() {
cout << "T->FT'" << endl;
F();
T_();
}
void T_() {
if (token[localhead] == '*') {
match('*');
cout << "T'->*FT'" << endl;
F();
T_();
} else {
cout << "T'->ε" << endl;
}
}
void F() {
if (token[localhead] == 'i') {
match('i');
cout << "F->i" << endl;
} else if (token[localhead] == '(') {
match('(');
E();
if (token[localhead] == ')') {
cout << "F->(E)" << endl;
match(')');
} else {
error();
}
}
}
void error() {
cout << "产生错误";
}