第四章
语法分析器的功能
自上而下分析面临的问题
LL(1)分析法
递归下降分析程序构造
预测分析程序
LL(1)分析中的错误处理
预测分析程序
预测分析程序工作过程
G:
E → E+T | T
T → T*F | F
F →(E) | i
消除左递归:
G':
E → TE'
E'→+TE'|ε
T → FT'
T'→*FT'|ε
F →(E) | i
表达式文法的预测分析表
i
+
*
(
)
#
E
→TE'
→TE'
E'
→+TE'
→ε
→ε
T
→FT'
→FT'
T'
→ε
→*FT'
→ε
→ε
F
→i
→(E)
空白格均指“出错标志”
总控程序
预测分析表
栈
输入串
输出
…… a ……#
*
.
.
.
#
"#" :句子括号
"S" :文法的开始符号
"X" :存放当前栈顶符号的工作单元
"a" :存放当前输入符号a的工作单元
把‘#’和S 推入 STACK 栈
把第一个输入符号读进a;
FLAG:=TRUE;
WHILE FIAG DO
把STACK栈顶符号上托出去, 并放入X
IF X∈VT THEN IF X=a THEN 把下一个输入符号读进a ELSE ERROR
ELSE IF X='#' THEN
IF X=a THEN FLAG:=FALSE
ELSE ERROR
ELSE IF M[X, a]={ X→X1X2...XK } THEN
把XK,XK-1,…X1 一一推进 STACK ELSE ERROR
END OF WHILE;
p77
对输入串 i+i*i# 进行分析
编译原理4.5.1-预测分析程序 来自淘豆网www.taodocs.com转载请标明出处.