给定文法G:1. S→(L)|a 2.L→L, S|S 请消除文法G的左递归,并写出递归下降分析的相应递归过程。
时间: 2024-05-24 13:10:34 浏览: 89
消除文法G的左递归:
1. S→aS'
S'→ε|(LS')
2. L→SA
A→,SA|ε
递归下降分析的相应递归过程:
首先,定义一个全局变量pos,表示当前扫描到的字符串位置。
1. 对于S→aS',递归函数为:
void S() {
if (str[pos] == 'a') {
pos++;
Sprime();
}
}
2. 对于S'→ε,递归函数为:
void Sprime() {
// do nothing
}
3. 对于S'→(LS'),递归函数为:
void Sprime() {
if (str[pos] == '(') {
pos++;
L();
if (str[pos] == ')') {
pos++;
Sprime();
}
}
}
4. 对于L→SA,递归函数为:
void L() {
S();
Aprime();
}
5. 对于A→,SA,递归函数为:
void Aprime() {
if (str[pos] == ',') {
pos++;
S();
Aprime();
}
}
6. 对于A→ε,递归函数为:
void Aprime() {
// do nothing
}
阅读全文