对文法G[S]:S→a|∧|(T);T→T,S|S:回答问题1~问题3。
【表】
表4-2 预测分析表
a | ∧ | ( | ) | , | # | |
S | →a | →∧ | (u)(2)(/u) | |||
T | (u)(1)(/u) | →SN | →SN | |||
N | (u)(3)(/u) | →,SN |
【问题1】 对文法G进行改写,然后对每个非终结符写出不带回溯的递归子程序。 |
参考答案:
解析:改写文法为: (0)S→d (1)S→∧ (2)S→(T) (3)T→SN (4)N→,SN (5)N→ε 非终结符 FIRST集 FOLLOW集 S {a,∧,(} {#,,,}} T {a,∧,(} {}}… N {,,ε}. {}}… 对左部为N的产生式可知: FIRST(→,SN);{,} FIRST(→ε):{ε} FOLLOW(N)={}}
[分析]: 对于文法 S→d|^|(T) T→T,S|S 由于SELECT(N→,SN)∩SELECT(N→ε)={,}∩{}}=
,所以文法是。LL(1)的。 也可由预测分析表中无多重入口判定文法是LL(1)的。 (3)对输入串(a,a)#的分析过程为: 栈 当前输入符 剩余输入符 所用产生式 (STACK) (CUR CHAR) (1NOUT STRING) (OPERATION) #S ( a,a)#... .. #)T( ( a,a)#... S→(T) #)T a ,a)#... . #)NS a ,a)#... T→SN #)Na a ,a).. S→a #)N , a)#... . #)NS, , a)#... N→,SN #)NS a )#... . #)Na a )#... S→a #)N ) #... . #) ) #... N→ε # # 可见输入串(a,a)#是文法的句子。