搜题
问题   更新时间2023/4/3 12:59:00

对文法G[S]
Sa|∧|(T)
TT,S|S
(1)对文法G进行改写消去左递归,然后对每个非终结符写出不带回溯的递归子程序。
(2)经改写后的文法是否是LL(1)的?给出它的预测分析表。

解:(1)由于有TT,S的产生式,所以消除该产生式的左递归,有新的文法G/[S]: Sa|∧|(T) TSU U,SU|ε (2)判断文法G/[S]是否为LL(1)文法。 各非终结符的FIRST集合如下: FIRST(S)={a,∧,(} FIRST(T)=FIRST(S)={a,∧,(} FIRST(U)={,,ε} 各非终结符的FOLLOW集合如下: FOLLOW(S)={#} ∪ FIRST(U) ∪ FOLLOW(T) ∪ FOLLOW(U)={#,,,)} FOLLOW(T)={)} FOLLOW(U)=FOLLOW(T)={)} 每个产生式的SELECT集合如下: SELECT(Sa)={a} SELECT(S∧)={∧} SELECT(S(T))={(} SELECT(TSU)=FIRST(S)={a,∧,(} SELECT(U,SU)={,} SELECT(Uε)=FOLLOW(U)={)} 可见,相同左部产生式的SELECT集的交集均为空,所以文法G/[S]是LL(1)文法。 文法G/[S]的预测分析表如下: a ∧ ( ) , # S a ∧ (T) T SU SU SU U ε ,SU
王老师:19139051760(拨打)