编译原理第7章答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第七章LR分析法

1.已知文法

A→aAd|aAb|ε

判断该文法是否是SLR(1)文法,若是构造相应分析表,并对输入串ab#给出分析过程。

解:增加一个非终结符S/后,产生原文法的增广文法有:

S/→A

A→aAd|aAb|ε

下面构造它的LR(0)项目集规范族为:

02

对于I0来说有

FOLLOW(A)∩{a}={b,d,#}∩{a}=Φ

所以在I0状态下面临输入符号为a时移进,为b,d,#时归约,为其他时报错。

对于I2来说有也有与I0完全相同的结论。

这就是说,以上的移进-归约冲突是可以解决的,因此该文法是SLR(1)文法。其他SLR(1)分析表为:下面构造它的SLR(1)项目集规范族为:

15

S→a|^|(T)

T→T,S|S

(1)构造它的LR(0),LALR(1),LR(1)分析表。

(2)给出对输入符号串(a#和(a,a#的分析过程。

(3)说明(1)中三种分析表发现错误的时刻和输入串的出错位置有何区别。解:

(1)加入非终结符S/,方法的增广文法为:

S/→S

S→a

S→^

S→(T)

T→T,S

T→S

下面构造它的LR(0)项目集规范族为:

表7.15.1 文法的LR(0)分析表

17.若包含条件语句的语句文法可缩写为:

S→iSeS|iS|S;S|a

其中:i代表if,e代表else,a代表某一语句。若规定:

(1)else与其左边最近的if结合

(2);服从左结合

试给出文法中i,e,; 的优先关系,然后构造出无二义性的LR分析表,并对输入串iiaea#给出分析过程。解:加入S/→S产生式构造出增广文法如下:

[0] S/→S

[1] S→iSeS

[2] S→iS

[3] S→S;S

[4] S→a

由习惯可知,定义文法中i,e,;,a4个算符的优先关系为:a>e>i>;。并且i与;的结合方向均为自左至右。

由上述状态项目集可见:

a.状态I1存在移进-归约冲突,由于FOLLOW(S/)∩{;}={#}∩{;}=Φ,所以面临#号时应acc,面临;号时

应移进。

b.状态I5存在移进-归约冲突,由于FOLLOW(S)={e,;,#}与{;}或{e}交集不空,所以不是SLR(1)文法,

根据优先级与结合性有,如果面临#号应该归约到S。如果面临e,由于e优先于i,应移进;

如果面临;,由于i优先于;,应归约。

c.状态I6存在移进-归约冲突,由于FOLLOW(S)={e,;,#}与{;}交集不空,根据优先级与结合性有,

如果面临#或e号应该归约到S。如果面临;,由于;服从左结合,应归约到S。

d.状态I8存在移进-归约冲突,由于FOLLOW(S)={e,;,#}与{;}交集不空,根据优先级与结合性有,

如果面临#或e号应该归约到S。如果面临;,由于e优先于;,应归约到S;

由上述分析得到该文法的无二义性的LR分析表如下:

相关文档
最新文档