关于LL(1)文法

来源:百度知道 编辑:UC知道 时间:2024/05/03 08:03:33
1、如下一个LL(1)文法:(其中E是开始符号)
ETD
D+TD|-TD|ε
TFS
S*FS | /FS|ε
F(E)| i
请完成(1)计算相应的First和Follow集合;(2)构造预测分析表;(3)写出“i/i-i”符号串的分析过程;(4)写出“i*i+i”符号串的分析过程

我是初学者,求高手给出完整理的解过程,如果能带上求FIRST和FOLLOW集的快捷方法更好。
急需该题答案.例题就不要了.谢谢
1、如下一个LL(1)文法:(其中E是开始符号)
看不清楚的部分
E->TD
D->+TD|-TD|ε
T->FS
S->*FS | /FS|ε
F->(E)| i

我以前做过,这是一个最基本的编译原理的试题,我有个一样的例题,如果你看了以后还不会做,我在把这个给你。
算术表达式文法G[E]:E→E+T│T T→T*F│F F→(E)│i
(1) 求出每条产生式的SELECT集。
(2) 依照SELECT集把产生式填入分析表。
(3)用LL(1)方法(预测分析法)分析符号串i+i是否文法G的合法句子。
(1)要消除G的左递归得到文法 G‘
E→TE '
E'→+TE'│ε
T→FT '
T'→*FT'│ε
F→(E)│i
(2)求出每个产生式的select集,G’是LL(1)文法
SELECT(E→TE' ) = { (,i } SELECT(E'→+TE' ) = { + }
SELECT(E'→ε ) = { ),# } SELECT(T→FT' ) = { (,i }
SELECT(T'→*FT' ) = { * } SELECT(T'→ε ) = { +,),# }
SELECT(F→(E) ) = { ( } SELECT(F→ i ) = { i }

(1)first(E)={(,i},first(D)={+,-,ε},first(T)={(,i},first(S)={*,/,ε}
first(F)={(,i}
follow(E)={#,)},follow(D)={#,)},follow(T)={+,-,#,)} follow(S)={+,-,#,)} follow(F)={*,/,+,-,#,)}
(2)select(E->TD)=FIRST(TD)={(,i}
SELECT(E->+TD)={+}
SELECT(E->-TD)={-}
SELECT(E->ε)={#,)}
SELECT(T->FS)={(,i}
SELECT(S->*FS)={*}
S