递归下降的预测分析
- 消除左递归
- 提取公因子
- 求first集和follow集
- 构造预则分析表
下面以一个支持加法,乘法和括号运算符的计算器文法为例为例子
E->E+T|T
T->T*F|F
F->(E)|id
消除左递归后
E->TE'
E'->+TE'|空
T->FT'
T'->*FT'|空
F->(E)|id
构造出的预则分析表如下
package test;
import java.util.Scanner;
public class PredictAna {
int p = 0;
char[] input;
void E() throws SyntaxException {
char t = input[p];
if (t == 'i' || t == '(') {
//应用产生式 E -> T E1
T();
E1();
} else throw new SyntaxException();
}
void E1() throws SyntaxException {
char