编译原理_第三版_课后答案

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

{2,3,5,7,9,10} {2,4,5,7,8,10} {2,4,5,7,8,10} {11} {6} ห้องสมุดไป่ตู้ {2,5,7,8,10} φ φ
{2,3,5,7,10} {2,3,5,7,9,10} φ φ
{11} {11} φ φ S
{6} {6} φ φ
3: 5: 6: S a b S S A a b A a A S b A
文法: (1) 最左推导: 最右推导: (2) (((a,a),^,(a)),a) (((S,a),^,(a)),a) (((T,a),^,(a)),a) (((T,S),^,(a)),a) (((T),^,(a)),a)
((S,^,(a)),a) ((T,^,(a)),a) ((T,S,(a)),a) ((T,(a)),a) ((T,(S)),a) ((T,(T)),a) ((T,S),a) ((T),a) (S,a) (T,S) (T) S “移进-归约”过程: 步骤 栈 输入串 动作 0 # (((a,a),^,(a)),a)# 预备 1 #( ((a,a),^,(a)),a)# 进 2 #(( (a,a),^,(a)),a)# 进 3 #((( a,a),^,(a)),a)# 进 4 #(((a ,a),^,(a)),a)# 进 5 #(((S ,a),^,(a)),a)# 归 6 #(((T ,a),^,(a)),a)# 归 7 #(((T, a),^,(a)),a)# 进 8 #(((T,a ),^,(a)),a)# 进 9 #(((T,S ),^,(a)),a)# 归 10 #(((T ),^,(a)),a)# 归 11 #(((T) ,^,(a)),a)# 进 12 #((S ,^,(a)),a)# 归 13 #((T ,^,(a)),a)# 归 14 #((T, ^,(a)),a)# 进 15 #((T,^ ,(a)),a)# 进 16 #((T,S ,(a)),a)# 归 17 #((T ,(a)),a)# 归 18 #((T, (a)),a)# 进 19 #((T,( a)),a)# 进 20 #((T,(a )),a)# 进 21 #((T,(S )),a)# 归 22 #((T,(T )),a)# 归
0 0 1 0 6 5 4 0 1 1 最小化: 0 1 0 2 0 1 0 5 4 3 0 1 1 1 1 0 1 0 1 1 0 1 1 0
P64–8
(1) (2) (3)
P64–12
(a) a a,b 1
0 a 确定化: a {0} {0,1} {1} φ 给状态编号: a 0 1 2 3 a a 1 0 a 3 2 b a 最小化: a b 2 b a b b b 1 1 0 3 b 2 2 3 3 {0,1} {0,1} {0} φ b {1} {1} φ φ
P81–3
/*************** (1) 是,满足三个条件。 (2) 不是,对于A不满足条件3。 (3) 不是,A、B均不满足条件3。 (4) 是,满足三个条件。 ***************/
第五章 P133–1
短语: E+T*F, T*F, 直接短语: T*F 句柄: T*F
P133–2
0 1 1 3 2 1 0 最小化: 0 1 3 1 0 0 0 1 1 0 1
第四章 P81–1
(1) 按照T,S的顺序消除左递归 递归子程序: procedure S; begin if sym='a' or sym='^' then abvance else if sym='(' then begin advance;T; if sym=')' then advance; else error; end else error end; procedure T; begin S; end;
P36-10
/************** ***************/
P36-11
/*************** L1: L2: L3: L4: ***************/
第三章习题参考答案 P64–7
(1)
X Y 0 X 1 2 3 4 Y 5 1 1 1 确定化: 0 {X} φ {1,2,3} {2,3} {2,3,4} {2,3,5} {2,3,4,Y} φ φ {2,3} {2,3} {2,3,5} {2,3} {2,3,5} 0 1 3 2 0 1 {1,2,3} φ {2,3,4} {2,3,4} {2,3,4} {2,3,4,Y} {2,3,4,} 1 0

进 进 归


P134–5
(1)
0. 4. 8. (2) 1
1. 5. 9. 6. 10.
2. 11.
3. 7.
S 9 8 7 S a 11 10 0
A
4 3 2 A d 5 6 确定化: S {0,2,5,7,10} {1,2,5,7,8,10} {2,3,5,7,10} {2,5,7,8,10} {1,2,5,7,8,10} {2,5,7,8,10} {2,4,5,7,8,10} {2,5,7,8,10} A {2,3,5,7,10} {2,3,5,7,9,10} {2,3,5,7,10} {2,3,5,7,9,10} a {11} {11} {11} {11} b {6} {6} {6} {6} S
4: 0: 7: A b a b a a b S
2: 1:
DFA 构造LR(0)项目集规范族也可以用GO函数来计算得到。所得到的项目集 规范族与上图中的项目集一样: ={,,,,} GO(,a)={ }=
GO(,b)={ }= GO(,S)={ ,,,,,}= GO(,A)={ ,,,,}= GO(,a)={ }= GO(,b)={ }= GO(,S)={ ,,,,}= GO(,A)={ ,,,,,}= GO(,a)={ }= GO(,b)={ }= GO(,S)={ ,,,,,}= GO(,A)={ ,,,,}= GO(,a)={ }= GO(,b)={ }= GO(,S)={ ,,,,}= GO(,A)={ ,,,,,}= GO(,a)={ }= GO(,b)={ }= GO(,S)={ ,,,,,}= GO(,A)={ ,,,,}= GO(,a)={ }= GO(,b)={ }= GO(,S)={ ,,,,}= GO(,A)={ ,,,,,}= 项目集规范族为C={,,,,,,} (3)不是SLR文法 状态3,6,7有移进归约冲突 状态3:FOLLOW(S’)={#}不包含a,b 状态6:FOLLOW(S)={#,a,b}包含a,b,;移进归约冲突无法消解 状态7:FOLLOW(A)={a,b}包含a,b;移进归约冲突消解 所以不是SLR文法。 (4) 构造例如LR(1)项目集规范族 见下图: 对于状态5,因为包含项目[],所以遇到搜索符号a或b时,应该用归 约。又因为状态5包含项目[],所以遇到搜索符号a时,应该移进。因此 存在“移进-归约”矛盾,所以这个文法不是LR(1)文法。
^
#
P (4) procedure E; begin if sym='(' or sym='a' or sym='b' or sym='^' then begin T; E' end else error end procedure E'; begin if sym='+' then begin advance; E end else if sym<>')' and sym<>'#' then error end procedure T; begin if sym='(' or sym='a' or sym='b' or sym='^' then begin F; T' end else error end procedure T'; begin if sym='(' or sym='a' or sym='b' or sym='^' then T else if sym='*' then error end procedure F; begin if sym='(' or sym='a' or sym='b' or sym='^' then begin P; F' end else error end procedure F'; begin if sym='*' then begin advance; F' end end
procedure P; begin if sym='a' or sym='b' or sym='^' then advance else if sym='(' then begin advance; E; if sym=')' then advance else error end else error end;
1 0 a b (b) b 0 3 2 a a a b 5 4 1 a 已经确定化了,进行最小化 最小化: b 0 2 1 a a b b a a b a b b a
P64–14
(1) 1 0 0 1
0 (2):
Y X 2 0 1 Y 1 X 0 确定化: 0 {X,1,Y} {1,Y} {2} φ 给状态编号: 0 1 2 3 0 1 0 {1,Y} {1,Y} {1,Y} φ 0 1 1 1 3 1 {2} {2} φ φ 1 2 2 3 3
P81–2
文法: (1) FIRST(E)={(,a,b,^} FIRST(E')={+,ε} FIRST(T)={(,a,b,^} FIRST(T')={(,a,b,^,ε} FIRST(F)={(,a,b,^} FIRST(F')={*,ε} FIRST(P)={(,a,b,^} FOLLOW(E)={#,)} FOLLOW(E')={#,)} FOLLOW(T)={+,),#} FOLLOW(T')={+,),#} FOLLOW(F)={(,a,b,^,+,),#} FOLLOW(F')={(,a,b,^,+,),#} FOLLOW(P)={*,(,a,b,^,+,),#} (2) 考虑下列产生式: FIRST(+E)∩FIRST(ε)={+}∩{ε}=φ FIRST(+E)∩FOLLOW(E')={+}∩{#,)}=φ FIRST(T)∩FIRST(ε)={(,a,b,^}∩{ε}=φ FIRST(T)∩FOLLOW(T')={(,a,b,^}∩{+,),#}=φ FIRST(*F')∩FIRST(ε)={*}∩{ε}=φ FIRST(*F')∩FOLLOW(F')={*}∩{(,a,b,^,+,),#}=φ FIRST((E))∩FIRST(a) ∩FIRST(b) ∩FIRST(^)=φ 所以,该文法式LL(1)文法. (3) + * ( ) a b E E' T T' F F'
编译 原理 课后题答案 第二章 P36-6
(1) 是0~9组成的数字串 (2) 最左推导: 最右推导:
P36-7
G(S)
P36-8
文法: 最左推导: 最右推导: 语法树:/******************************** *****************/
P36-9
句子iiiei有两个语法树:
(4) 栈 作 # # #( #(a #(t #(t, # #(t,( # #(t,(a # #(t,(t # #(t,(t, #(t,(t,a # #(t,(t,s # #(t,(t # #(t,(t) # #(t,s # #(t # #(t ) # s success
输入字符串 (a,(a,a)) 预备 a, (a,a))# , (a,a))# , (a,a))# (a,a)) 进 a,a)) 进 ,a)) 进 ,a)) 归 a))# )) 进 )) 归 )) 归 ) 进 ) 归 ) 归 # #
23 24 25 26 27 28 29 30 31 32 33 34
#((T,(T) #((T,S #((T #((T) #(S #(T #(T, #(T,a #(T,S #(T #(T) #S
),a)# 进 ),a)# 归 ),a)# 归 ,a)# 进 ,a)# 归 ,a)# 归 a)# 进 )# 进 )# 归 )# 归 # 进 # 归
P133–3
(1) FIRSTVT(S)={a,^,(} FIRSTVT(T)={,,a,^,(} LASTVT(S)={a,^,)} LASTVT(T)={,,a,^,)} (2) a ^ ( ) a ^ ( ) < < < > > = >
, > > < >
, < < < > > 是算符文法,并且是算符优先文法 (3)优先函数 a f g 4 5 ^ 4 5 ( 2 5 ) 4 2 , 4 3
procedure ; begin if sym=',' then begin advance; S; end end; 其中: sym:是输入串指针IP所指的符号 advance:是把IP调至下一个输入符号 error:是出错诊察程序 (2) FIRST(S)={a,^,(} FIRST(T)={a,^,(} FIRST( )={,, } FOLLOW(S)={),,,#} FOLLOW(T)={)} FOLLOW( )={)} 预测分析表 a S T 是LL(1)文法 ^ ( ) , #
相关文档
最新文档