预测分析法是一种确定的自顶向下的分析方法,一个文法能否用预测分析法进行分析,关键看其是否为LL(1)文法,一个预测分析器由三个部分组成:
#预测分析程序
#先进后出栈
#预测分析表
下面我们以一个具体的实例来看预测分析器的实现算法,其他文法可照推:
已知表达式文法:(只含*、+、)、(、i算术表达式的判断文法)
E->E+T|T
T->T*F|F
F->i|(E)
设计预测分析程序。
由于文法中含有左递归,所以必须先消除左递归,消除后为:
E->TE'
E'->+TE'|e
T->FT'
T'->*FT'|e
F->i|(E)
**说明:e代表空串**
进一步可得如下预测分析表:
|
i |
+ |
* |
( |
) |
# |
E |
TE’ |
|
|
TE’ |
|
|