- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章 文法和语法分析
第四章 文法与语法分析
4.8. 形如A--Aa 的产生式称为左递归的,类似地称B--βB 的产生式为右递归的。证明如果一个非终极符既有左又有右递归式,则文法一定有二义性。
答案:
设文法的非终极符A,有产生式
A→Aα|α
A→βA|β
字符串βα 符合文法的要求,但分析树有两种
A A
/ \ / \
A α β A
| |
β α
因此非终极符既有左递归式,又有右递归式,则一定有二义性。
4.12. 下列那些文法是LL(1)文法?
答案:
LL(1)文法的条件:对于任意非终极符A,其任意两个产生式A-α和A-β都要满足下面条件:
predict(A-α)∩predict(A-β)=Ф;
(a) 因为非终极符B 不可到达,所以最后两个产生式可以去掉。对具有相
同左部的产生式A-a 和A-λ,它们的Predict 集的交集为空:
predict(A-a)={a};Predict(A-λ)={b}
故a)所示文法是LL(1)文法。
(b) 1)A,B 可导出空
2)first(A)={a,b,λ},first(B)={b,λ},first(S)={a,b}
follow(A)={b}, follow(B)={b}, follow(S)={#}
predict(S-Ab)={a,b},
predict(A-a)={a},predict(A-B)={b},predict(A-λ)={b}
predict(B-b)={b},predict(B-λ)={b}
因为predict(A-B)∩predict(A-λ)={b}!=Ф
predict(B-b)∩predict(B-λ)={b}!=Ф
所以不是LL(1)文法
(c) 1)S,A,B 可导出空
2)first(S)={a,b},first(A)={a,λ},first(B)={b,λ}
follow(S) ={#},follow(A) ={a,b,#},follow(B) ={a,b,#}
predict(S-ABBA)={a,b,#}
predict(A-a)={a},predict( A-λ )={a,b,#} (*)
predict(B-b)={b},predict(B-λ)={a,b,#} (**)
由(*)和(**)两行知,不是LL(1)文法.
(d) 1)没有非终极符可导出空
2)first(C)={c,d},first(B)={b,c,c},first(S)={a,b,c,d}
follow(S)={e,#},follow(B)={e,#},follow(C)={c,e,#}
predict(S-aSe)={a},predict(S-B)={b,c,d}
predict(B-bBe)={b},predict(B-C)={c,d}
predict(C-cCc)={c},predict(C-d)={d}
因为满足LL(1)文法的条件,所以是LL(1)文法.
4.13 对下列文法构造LL(1)分析表:
E ---E
E --(E)
E --Var Etail
Etail ---E
Etail --λ
Var --id Vtail
Vtail --(E)
Vtail --λ
答案:
First(E)={-, (, id} Follow(E)={#,)}
First(Etail)={-, λ} Follow(Etail)={#,)}
First(Var)={ id } Follow(Var)={-,#,)}
First(Vtail)={ (, λ} Follow(Vtail){-,#,)}
[1] predict (E→-E)={¨ }
[2] predict (E→(E))={(}
[3] predict (E→Var Etail)={id}
[4] predict (Etail→-E)={¨ }
[5] predict (Etail→λ)={#,)}
[6] predict (Var→id Vtail)={id}
[7] predict (Vtail→(E))={(}
[8] predict (Vtail→λ)={¨ ,#,)}
4.14 写出上述LL(1)分析器分析i--i(i)的过程,其中i 是标志符。
4.15 对下列文法转换为LL(1)文法:
DL --DL;D
DL --D
D --idL: Type
idL --id
idL --idL, id
Type --Stype
Type --array (StypeL) of Type
Sttype --id
STtype --Bound..Bound
Bound --Sign IntLiteral
Bound --id
Sign --+
Sign ---
STypeL
原创力文档


文档评论(0)