编译原理第7章答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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分析表如下: