编译原理2习题答案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FOLLOW 集合有: FOLLOW(E)={),#}; FOLLOW(E')=FOLLOW(E)={),#}; FOLLOW(T)=FIRST(E')∪
1. 考虑以下的文法:
E → ( L ) | a L → L , E | E
1) 2) 3)
为这个文法构造 LR(0)项目集规范族 s。 判断这个文法是否是 LR(0)文法?若不是,请描述出 LR(0)冲突,如果是,则构造 LR(0)分析表。 判断这个文法是否是 SLR(1)文法?若是,构造 SLR(1)分析表 (0) E’ → E (1) E → ( L ) (2) E → a (3) L → L , E (4) L → E
E a
A → ·d I 1: E’ → E· I3: E→ a·
a
a
是 LR(0)文法, LR(0)分析表为:
ACTION a 0 1 2 3 4 5 6 7 8 r4 r1 S3 r3 r4 r1 S2 r3 r3 r3 r3 S3 r2 S2 r2 r2 S6 r4 r1 r2 S7 r4 r1 r4 r1 8 r2 S3 ( S2 acc 5 4 ) , $ E 1 GOTO L
2.设文法 G(S): S→(L)|a S|a L→L,S|S (1) 消除左递归和回溯; (2) 计算每个非终结符的 FIRST 和 FOLLOW; 答: S→(L)|aS’ S’→S|ε L→SL’ L’→,SL’|ε (2) FIRST 和 FOLLOW FIRST(S)={(,a) FIRST(S’)={,a,ε} FIRST(L)={(,a) FIRST(L’)={,,ε} 4. 构造正规式相应的 NFA : 1(0|1)*101 解 1(0|1)*101 对 应 的 NFA 为
答:拓广文法:
(
I2 : E → L→ ·L,E L→ ·E E→ ·(L) E→ ·a
I4: E→ (L·) L L→ L·,E (·L) , ( I7: L→ L,·E
E→ ·(L) E→ ·a
) E
I6: E→ (L)· I8: L→ L,E·
( I0: E’→ ·E E→ ·(L) E→Hale Waihona Puke Baidu·a
E I5: L → E·
4. 已知文法 G[S] 为 S → aSb|Sb|b ,试证明文法 G[S] 为二义文法。 证明: 由文法 G[S]:S→aSb|Sb|b,对句子 aabbbb 对应的两棵语法树为:
1.构造正规式 1(1|0)*101 所描述语言的 DFA 的状态转换图。 解:先构造 NFA:
确定化:
重新命名,令 AB 为 B、AC 为 C、ABY 为 D 得: 所以,可得 DFA 为:
非终结符 E’ E L
Follow 集合 {$} {} , , $} {}, ,}是 SLR(1)文法
2.对 下 面 的 文 法 G : E → TE' F → PF' E' → +E| ε F' → *F'| ε T → FT' T' → T| ε P → (E) | a | b | ^
(1)计算这个文法的每个非终结符的 FIRST 集和 FOLLOW 集。 (2) 证明这个方法是 LL(1) 的。 (3) 构造它的预测分析表。 FIRST(E')={+,ε} FIRST(P)={(,a,b,^); 解:(1)计算这个文法的每个非终结符的 FIRST 集和 FOLLOW 集。 FIRST 集合有: FIRST(E)=FIRST(T)=FIRST(F)=FIRST(P)={(,a,b,^); FIRST(T')=FIRST(T)+{ε}={(,a,b,^,ε); FOLLOW(E)={+,},#};//不包含 ε FOLLOW(T')=FOLLOW(T)=FIRST(E')∪FOLLOW(E)={+,},#}; FOLLOW(F)=FIRST(T')∪FOLLOW(T)={(,a,b,^,+,),#};//不包含 ε FOLLOW(F')=FOLLOW(F)=FIRST(T')∪FOLLOW(T)={(,a,b,^,+,),#}; FOLLOW(P)=FIRST(F')∪FOLLOW(F)={*,(,a,b,^,+,),#};//不包含 ε (2)证明这个方法是 LL(1)的。 各产生式的 SELECT 集合有: SELECT(E->TE')=FIRST(T)={(,a,b,^); SELECT(E'->+E)={+}; SELECT(E'->ε)=FOLLOW(E/)={},#} SELECT(T->FT')=FIRST(F)={(,a,b,^); SELECT(T'->T)=FIRST(T)={(,a,b,^); SELECT(T'->ε)=FOLLOW(T/)={+,},#}; SELECT(F->PF')=FIRST(P)={(,a,b,^); SELECT(F'->*F')={*}; SELECT(F'->ε)=FOLLOW(F')={(,a,b,^,+,),#}; SELECT(P->(E))={() SELECT(P->a)={a} SELECT(P->b)={b} SELECT(P->^)={^} 可见,相同左部产生式的 SELECT 集的交集均为 空,所以文法 G[E]是 LL(1)文法。 (3)构造它的预测分析表。 文法 G[E]的预测分析表如下: FIRST(F')={*,ε};