- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7 - 2 给 定 文 法 G :
S?Aa|Ab|c A?Ad|Se|f
请消除文法的左递归,并提取公共左因子。
解:
消除文法 G 的②产生式直接左递归。
A→SeA | fA ③
A→dA | ? ④
消除间接左递归:按 S.A 排序(按算法 i=2,j=1 时)将 S 的① 产生式代入③有
A→AaeA | AbeA | ceA | fA ⑤
消除⑤的直接左递归有
A→ceAA | fAA ⑥
A→aeAA | beAA | ? ⑦
对 S 的①产生式提公因子有
S→AB | c ⑧
B→| a | b ⑨
最后,文法 G 提取公因子,消除左递归后的产生式由⑧, ⑨, ⑥,
⑦和④组成,无多余的产生式。
若按A.S 排序,得到的产生式组合是另外的形式,但它们是等价的文法。
7-3 给定文法 G: S?(L)|a L?L,S|S
消除文法 G 的左递归,并写出递归下降分析的相应递归过程。解:
消除左递归后,得文法 G: S→(L) | a
L→SL
L→, SL | ?
递归下降过程: procedure advance( ) begin
sym =getchar( )
end
procedure S;
begin
if sym =a then advance( )
else if sym =( begin
advance( )
L( );
if sym =) end
then
then advance( ) else error()
end procudure L;
begin S;
L;
else error()
end procudure L; begin
if sym =, then begin
advance( )
S;
L
end
end
解:
(1)G(S):S→AS
S→:AS | ?
A→BA
A→+BA|? B→bS* | a
(2)FIRST 集和 FOLLOW 集
FIRST
FOLLOW
S
b,a
#,*
S
:,?
#,*
A
b,a
#,*,:
A
+,?
#,*,:
B
b,a
#,*,:,+
预测分析表
S
S
S→AS
S→:AS
S→AS
S→?
S→?
A
A
A→BA
A→?
A→+BA
A→BA
A→?
A→?
B
B→a
B→bS*
a:+b*#(3)因为预测分析表无多重定义入口,所以G
a
:
+
b
*
#
解:
对习题 7-3 的文法G 消除左递归后,得文法 G:
S→(L) | a
L→SL
L→,SL | ?
FIRST 集和FOLLOW 集
FIRST
FOLLOW
S
(,a
),’,#
L
(,a
)
L
’,?
)
预测分析表
(
)
a , #
S S→(L)
S→a
L
L
L
L→SL
L→SL
L→)
L→,SL
因为预测分析表无多重定义入口,所以文法 G 是LL(1)文法。
8-1
S?AB
已知文法G:
A?Ab|bB B?a|Sb
写出bBABb 的规范推导。
画出bBABb 的语法树。
求bBABb 的短语、直接短语、句柄和最左素短语。解:
规范规范推导(最右推导)最右推导S?AB?ASb?AABb?bBABb
语法树(推导树)
短语 bB, AB, ABb, bBABb
直接短语 bB, AB
句柄 bB
最左素短语 bB
8-2
已知文法G:
S?SbF|F F?FaP|P P?c
试证明FaPbc 是文法 G 的一个句型。
画出FaPbc 的语法树。
求出FaPbc 的短语、直接短语、句柄和最左素短语。解:
因为存在推导 S?SbF?FbF?FaPbF?FaPbP?FaPbc
所以FaPbc 是文法G 的一个句型。
语法树
短语 FaP, c, FaPbc
直接短语 FaP, c
句柄 FaP
最左素短语 FaP
8-3
已知文法G:
S?AS|b A?SA|a
列出G 的 LR(0)项目集规范族。
这个文法是 LR(0)文法吗?是 SLR(1)文法吗?若是,请构造出相应的分析表。
解:
拓广文法
S→S
S→AS
S→b
A→SA
A→a
LR(0)项目集规范族
I0=closure{S→·S}
I1=GO(I0,S)
I2=GO(I0,A)
I3=GO(I0,b)
I0:S→·S
S→S·
S→A·S
S→b·
S→·AS S→·b A→·SA
A→·a
A→S·A A→·SA
A→·a
S→·AS
S→·AS S→·b
A→·SA
A→·a
I4=GO(I0,a)
A→a·
S→·b I5=GO(I1,A)
A→SA·
S→A·S S→·AS S→·b A→·SA A→·a
I6=GO(I1,S)
A→S·A
A→·SA A→·b S→·AS S→·b
I7=GO(I2,S)
S→AS·
A→S·A A→·S
文档评论(0)