直接上题目。
例题1:给定文法G[S]
E ---> TE'
E' ---> +TE' | ε
T ---> FT'
T' ---> *FT' | ε
F ---> (E) | id
画出LL(1)预测分析表,并对输入串id1*id2+id3进行语法分析。
这里我直接给出LL(1)预测分析表
下面对输入串id1*id2+id3进行语法分析。
首行符号栈压入 # 和 开始字符 E。
输入串放入 id1*id2+id3 和 # 。
看符号栈的栈顶元素 和 输入串的首元素,找对应LL(1)分析表中的哪一个产生式。
例如:
STEP 0 中, 符号栈栈顶为E,输入串首元素为id。
到LL(1)分析表中,找第 E 行 第 id 列 对应的产生式 E ---> TE',即紧随其后的STEP 1要用的产生式就是 E ---> TE'。把该产生式填入STEP 1的所用产生式列。
把 E 弹出栈, 把 TE' 逆向压入栈中。得到 STEP 1符号栈为 #E'T。
此时输入串未移进,原样抄回来。(只有在符号栈栈顶和输入串首字符刚好对应时,才同时弹出符号栈和输入串的元素)
STEP | 符号栈 | 输入串 | 所用产生式 |
0 | #E | id1*id2+id3# | |
1 | #E'T | id1*id2+id3# | E ---> TE' |
2 | #E'T'F | id1*id2+id3# | T ---> FT' |
3 | #E'T'id | id1*id2+id3# | F ---> id |
4 | #E'T' | *id2+id3# | |
5 | #E'T'F* | *id2+id3# | T' ---> *FT' |
6 | #E'T'F | id2+id3# | |
7 | #E'T'id | id2+id3# | F ---> id |
8 | #E'T' | +id3# | |
9 | #E' | +id3# | T' ---> ε |
10 | #E'T+ | +id3# | E' ---> +TE' |
11 | #E'T | id3# | |
12 | #E'T'F | id3# | T ---> FT' |
13 | #E'T'id | id3# | F ---> id |
14 | #E'T' | # | |
15 | #E' | # | T' ---> ε |
16 | # | # | E' ---> ε |
语法分析完毕!
下面给出预测分析法的实现步骤和算法: