关于LL(1)文法

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

(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)={*}
SELECT(S->/FS)={/}
SELECT(S->ε)={+,-,#,)}
SELECT(F->(E))={(}
SELECT(F->i)={i}
预测分析表:
+ - * / ( ) i #
E ->+TD ->-TD ->TD ->ε ->TD ->ε
D
T ->FS ->FS
S ->ε ->ε ->*FS ->/FS ->(E) ->ε ->ε
F ->i

(3)i/i-i的分析过程:
步骤 输入串 剩余串 移进或规约
1 # i/i-i#
2 #i /i-i# E->TD
3 #DT ......
...
剩余的只要按照书上的步骤填就行了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-06-24
我以前做过,这是一个最基本的编译原理的试题,我有个一样的例题,如果你看了以后还不会做,我在把这个给你。
算术表达式文法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 }本回答被提问者和网友采纳
第2个回答  2019-03-07
(1)首先该文法无左递归存在,没有公共左因子。
其次:对于s→aaab|bbba
first(aaab)={a}
first(bbba)={b}
first(aaab)∩first(bbba)=φ
所以该文法是ll(1)文法。
(2)证明该文法不是slr的。
文法的lr(0)项目集规范族为:
i0={s’→.s
s→.aaab
s→.bbba
a→.
b→.}
i1={
s’→
s.
}
i2={
s→a.aab
}
i3={
s→b.bba
}
i4={
s→aa.ab
a→.
}
i5={
s→bb.ba
b→.
}
i6={
s→aaa.b
}
i7={
s→bbb.a
}
i8={
s→aaab.
}
i9={
s→bbba.
}
考察i0:
follow(a)={a,b}
follow(b)={a,b}
follow(a)∩follow(b)=
{a,b}
产生规约-规约冲突。
所以该文法不是slr(1)文法。
相似回答