关于LL(1)文法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于LL(1)文法相关的知识,希望对你有一定的参考价值。
1、如下一个LL(1)文法:(其中E是开始符号)
ETD
D+TD|-TD|ε
TFS
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
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 ......
...
剩余的只要按照书上的步骤填就行了。 参考技术A 我以前做过,这是一个最基本的编译原理的试题,我有个一样的例题,如果你看了以后还不会做,我在把这个给你。
算术表达式文法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 本回答被提问者和网友采纳 参考技术B (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)文法。
编译原理题目关于判断LL(1)文法的
下列文法中____是LL(1)文法。(S是公理)
A . S→aSb|ab B.S→ab|Sab
C. S→aS|b D .S→aS|Sa
各位答案什么?为什么
B 和D不是,因为含有左递归
C是,因为SELECT(S→aS) 与SELECT(S→b)的交集为空,符合LL(1)文法的定义。 参考技术A 选C
因为 C里面 FIRST(aS)yuFIRST(b)为空
以上是关于关于LL(1)文法的主要内容,如果未能解决你的问题,请参考以下文章