LL(1)文法例题
已知文法G(S)如下,回答以下问题:
S → A
A → B A'
A' → = A | ε
B → C B'
B' → + B | ε
C → (A) |i
(1) 计算每个非终结符的 FIRST 和 FOLLOW 集合
(2)证明文法是 LL (1) 的
(3)构造预测分析表
(4)构造递归下降分析程序
(5)按顺序写出对句子i+i进行预测分析时,分析栈的状态
4.递归下降分析程序
void S() {
A();
}
void A() {
B();
A1();
}
void A1() {
if (lookahead == '=') {
match('=');
A();
} else {
// A' → ε
return;
}
}
void B() {
C();
B1();
}
void B1() {
if (lookahead == '+') {
match('+');
B();
} else {
// B' → ε
return;
}
}
void C() {
if (lookahead == '(') {
match('(');
A();
match(')');
} else if (lookahead == 'i') {
match('i');
} else {
error();
}
}
void match(char t) {
if (lookahead == t) {
lookahead = nextToken();
} else {
error();
}
}
lookahead = nextToken();
S();
if (lookahead == '#') {
printf("分析成功");
} else {
error();
}
