收藏 分销(赏)

编译原理课后答案.doc

上传人:xrp****65 文档编号:7216594 上传时间:2024-12-28 格式:DOC 页数:32 大小:829KB 下载积分:10 金币
下载 相关 举报
编译原理课后答案.doc_第1页
第1页 / 共32页
编译原理课后答案.doc_第2页
第2页 / 共32页


点击查看更多>>
资源描述
第二章 高级语言及其语法描述 4.令+、*和↑代表加,乘和乘幂,按如下的非标准优先级和结合性质的约定,计算1+1*2↑2*1↑2的值: (1) 优先顺序(从高至低)为+,*和↑,同级优先采用左结合。 (2) 优先顺序为↑,+,*,同级优先采用右结合。 解:(1)1+1*2↑2*1↑2=2*2↑1*1↑2=4↑1↑2=4↑2=16 (2)1+1*2↑2*1↑2=1+1*2*1=2*2*1=2*2=4 6.令文法G6为 N→D|ND D→0|1|2|3|4|5|6|7|8|9 (1) G6 的语言L(G6)是什么? (2) 给出句子0127、34和568的最左推导和最右推导。 解:(1)L(G6)={a|a∈∑+,∑=﹛0,1,2,3,4,5,6,7,8,9}} (2)N =>ND=> NDD=> NDDD=> DDDD=> 0DDD=> 01DD=> 012D=> 0127 N=> ND=> N7=> ND7=> N27=> ND27=> N127=> D127=> 0127 N=> ND=> DD=> 3D=> 34 N=> ND=> N4=> D4 =>34 N=> ND=> NDD=> DDD=> 5DD=> 56D=> 568 N=> ND=> N8=> ND8=> N68=> D68=> 568 7.写一个文法,使其语言是奇数集,且每个奇数不以0开头。 解:A→SN, S→+|-|∑, N→D|MD D→1|3|5|7|9, M→MB|1|2|3|4|5|6|7|8|9 B→0|1|2|3|4|5|6|7|8|9 8. 文法: 最左推导: 最右推导: 语法树:/******************************** *****************/ 9.证明下面的文法是二义的: S→ iSeS|iS|I 解:因为iiiiei有两种最左推导,所以此文法是二义的。 10.把下面文法改写为无二义的: S→SS|(S)|() 解:S→ ST|T, T→ (S)|() 11.给出下面语言的相应文法 L1={anbnci|n≥1,i≥0} L2={aibncn|n≥1,i≥0} L3={anbnambm|n,m≥0} L4={1n0m1m0n|n,m≥0} 解:(1)S→ AB|A A→ aAb|ab B→ c|cB (2) S→ AB|B A→ a|aA B→ bBc|bc (3) S→ AB|A|B|∑ A→ aAb|ab B→ aBb|ab (4) S→ 1S0|0A1 A→ 0A1|01 第三章 词法分析 7.构造下列正规式的相应的DFA 1(0|1)*101 1(1010*|1(010)*1)*0 0*10*10*10* (00|11)*((01|10)(00|11)*(01|10)(00|11)*)* 解答: (1)1(0|1)*101 I I0 I1 {X} Ф {A,B,C} {A,B,C} { B,C} { B,C,D} {B,C} { B,C} { B,C,D} {B,C,D} { B,C,E} { B,C,D} {B,C,E} { B,C} {B,C,D,y} {B,C,D,y} {B,C,E} { B,C,D} S 0 1 A B B C D C C D D E D E C F F E D (2) 1(1010*|1(010)*1)*0 I I0 I1 {X} Ф {A,B,C} {A,B,C} {y} {D,H,I,L} {y} Ф Ф {D,H,I,L} {E,J} {B,C} {E,J} Ф {B,C,F,G,K} {B,C} {y} {D,H,I,L} {B,C,F,G,K} {B,C,G,I,L,y} {D,H,I,L} {B,C,G,I,L,y} {B,C,G,J,y} {B,C,D,H,I,L } {B,C,G,J,y} {B,C,G, y} {D,H,I,L} {D,H,I,K,L} {E,I,J,L} {B,C} {E,J,y} Ф {B,C,F,G,K } {E,I,J,L} {J} {B,C,F,G,K } {J} Ф {K} {K} {I,L} Ф {I,L} {J} {B,C} 8.给出下面正规表达式 (1) 以01结尾的二进制数串 (2) 能被5整除的十进制整数 (3) 包含奇数个1或者奇数个0的二进制数串 (4) 英文字母组成的所有符号串,要求符号串中的字母按照字典序排列。 (7)不包含子串abb的由a和b组成的符号串的全体。 解答: (1) (0|1)*01 (2) (1|2|…|9)(0|1|2|…|9)*(0|5)|0|5 (3) 0*1(0*10*10*)* (4) A*B*…Z* (7) b*(a|ab)* 9.对下面的情况给出DFA以及正规表达式。 (1){0,1}上的含有子串010的所有串。 (2){0,1}上不含子串010的所有串。 解答: (1)(0|1)*010(0|1)* (2)1*(0|1*|1)*1* 12 将图3.8的(a)和(b)分别确定化和最少化。 解:1 确定化 a b {0} {0,1} {1} {0,1} {0,1} {1} {1} {0} __ 令A={0} B={0,1} C={1} 则状态转换图为: 2 最少化 首先,所有状态可分为 终态集{A B} 非终态集{C} 其次,考察{A B},由于{A B}由a到{B},由b到{C},所以不可分,令A={A B} 则最少化后的状态转换图为: 14 构造一个DFA,它接受∑={0,1}上所有满足下列条件的字符串,每个1都有0直接跟在右边。 解:1 正规式为: (0|10)﹡ 2 由正规式转化为NFA: 3 由NFA到DFA: 0 1 {X} {X} {b} {b} {X} __ 令A={X} B={b} 则状态转换图为: 4 最少化 终态集{A} 非终态集{B} 显然不可再划分,则最简的DFA即为: 15 给定右线性文法G: S→0S|1S|1A|0B A→1C|1 B→0C|0 C→0C|1C|1|0 求出一个与G等价的左线性文法。 解:1 由右线性文法构造NFA: 2 从NFA中构造左线性文法: F→A1|B0|C0|C1 A→S1|1 B→S0|0 C→C0|C1|A1|B0 S→S0|S1|1|0 第四章 语法分析-自上而下分析 1. 考虑下面文法 G1: S→a|∧|(T) T→T,S|S (1) 消去G1的左递归,然后对每个非终结符写出不带回溯的递归子程序。 (2) 经过改写的文法是否是LL(1)的?给出它的预测分析表。 解答: (1) 消去G1的左递归:S→a|∧|(T) T→ST’ T’ →,ST’|ε 递归子程序: PROCEDURE S; IF sym=’a’ THEN ADVANCE ELSE IF sym=’ ∧’ THEN ADVANCE ELSE IF sym=’ (’ THEN BEGIN ADVANCE T; IF sym=’ )’ THEN ADVANCE ELSE ERROR END ELSE ERROR; PROCEDURE T; BEGIN S;T’ END; PROCEDURE S; IF sym=’ ,’ THEN BEGIN ADVANCE S;T’ END; (2) 是LL(1)文法。 FIRST(S)={ a,∧,( } FIRST(T)={ a,∧,( } FIRST(T’)={ ,,ε } FOLLOW(S)={ #, , , ε, ) } FOLLOW(T)={ ) } FOLLOW(T’)={ ) } 预测分析表如下: a , ∧ ( ) # S S→a S→∧ S→ (T) T T→ST’ T→ST’ T→ST’ T’ T’ →,ST’ T’ →ε 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' 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; 3.下面文法那些是LL(1)文法? (1)S →Abc A →a|ε B→b|ε 没有左递归且FIRST 候选集不冲突且 FIRST(A)∩FOLLOW(A)={ a, ε} ∩ { b }=Ф FIRST(B)∩FOLLOW(B)={ b, ε} ∩ { c }=Ф 所以该文法为LL(1)文法 (2)S →Ab A →a|B|ε B→b|ε FIRST(B)={ b, ε} ∩ FIRST(ε) ={ε} ≠Ф 所以该文法不是LL(1)文法 (3)S →ABBA A →a |ε B→b|ε 没有左递归且FIRST 候选集不冲突 FIRST(A)∩FOLLOW(A)={ a, ε} ∩{b,#} =Ф FIRST(B)∩FOLLOW(B)={ b, ε}∩{b,a,#} ≠Ф 所以该文法不是LL(1)文法 (4) S →aSe|B B →bBe |C C→cCe|d 没有左递归且FIRST 候选集不冲突 所以该文法为LL(1)文法 4.Expr→_Expr Expr→(Expr)| Var ExprTail ExprTail→_ Expr|ε Var→id VarTail VarTail→(Expr)| ε (1) 构造LL(1)分析表 (2) 给出对句子id_ _id((id)) 的分析过程 解答:(1)FIRST(Expr)={_ , ( , id } FIRST(ExprTail)={_ , ε } FIRST(Var)={id} FIRST(VarTail)={ ( , ε} FOLLOW(Expr)={# , ) } FOLLOW(ExprTail) ={# , ) } FOLLOW(Var) ={_ , # , ) } FOLLOW(VarTail) ={_ , # , ) } 预测分析表如下: — id ( ) # Expr Expr→_Expr Expr→Var ExprTail Expr→(Expr) ExprTail ExprTail→_ Expr ExprTail→ε ExprTail→ε Var Var→id VarTail VarTail VarTail→ε VarTail→(Expr) VarTail→ε (3) 对句子id_ _((id)) 的分析过程: 步骤 符号栈 输入串 所用产生式 0 #Expr id_ _id((id))# 1 # ExprTail Var id_ _id((id))# Expr→Var ExprTail 2 # ExprTail VarTail id id_ _id((id))# Var→id VarTail 3 # ExprTail VarTail _ _id((id))# 4 # ExprTail _ _id((id))# VarTail→ε 5 # Expr_ _ _id((id))# ExprTail→_ Expr 6 # Expr _id((id))# 7 # Expr_ _id((id))# Expr→_Expr 8 # Expr id((id))# 9 # ExprTail Var id((id))# Expr→Var ExprTail 10 # ExprTail VarTail id id((id))# Var→id VarTail 11 # ExprTail VarTail ((id))# 12 # ExprTail )Expr( ((id))# VarTail→(Expr) 13 # ExprTail )Expr (id))# 14 # ExprTail ) )Expr( (id))# Expr→(Expr) 15 # ExprTail ) )Expr id))# 16 # ExprTail ) ) ExprTail Var id))# Expr→Var ExprTail 17 # ExprTail ) ) ExprTail VarTail id id))# Var→id VarTail 18 # ExprTail ) ) ExprTail VarTail ))# 19 # ExprTail ) ) ExprTail ))# VarTail→ε 20 # ExprTail ) ) ))# ExprTail→ε 21 # ExprTail ) )# 22 # ExprTail # ExprTail→ε 23 # # 分析成功 第五章 1. 短语: E+T*F, T*F, 直接短语: T*F 句柄: T*F 2 (1)(a, ( a, a ) ) 的最左推导:S => ( T ) =>( T,S ) => ( S,S ) =>(a,S ) =>( a,( T ) ) => ( a,( T,S ) ) => ( a,(S,S ) ) => ( a,( a ,S ) ) => ( a,( a ,a ) ) 最右推导:S => ( T ) =>( T,S ) => ( T, (T) ) =>( T, (T, S) ) =>( T, (T, a) ) =>( T, (S, a) ) => ( T,(S, a ) ) => ( T,( a ,a ) ) => (S,( a ,a ) ) => ( a,( a ,a ) ) (((a, a),^,(a)),a) 的最左推导::S => ( T ) =>( T,S ) => ( S,S ) =>( ( T ) ,S ) => (( T,S ),S ) => (( T,S,S ),S ) =>(( S,S,S ),S ) =>(( ( T ),S,S ),S ) =>(( ( T,S ),S,S ),S ) =>(( ( S,S ),S,S ),S ) =>(( ( a, S ),S,S ),S ) =>(( ( a, a ),S,S ),S ) =>(( ( a ,a ),^,S ),S ) =>(( ( a ,a ),^ ,a ),S ) =>(( ( a ,a ),^ ,a ),a ) 最右推导:S => ( T ) =>( T,S ) =>( T, a ) =>( S ,a ) =>( (T) , a ) =>( (T, S) , a ) =>( (T, ( T )) , a ) =>( (T, ( a )) , a ) =>( (T, S, ( a )) , a ) =>( (T, ^, ( a )) , a ) =>( (S, ^, ( a )) , a ) =>( ((T), ^, ( a )) , a ) =>( ((T,S), ^, ( a )) , a ) =>( ((T ,a), ^, ( a )) , a ) =>( ((S ,a), ^, ( a )) , a ) =>( ((a ,a), ^, ( a )) , a ) (2) (((a, a),^,(a)),a)的规范规约及每一步的句柄为: (((a, a),^,(a)),a) a ( ((S ,a), ^, ( a )) , a ) S ( ((T ,a), ^, ( a )) , a ) a ( ((T,S), ^, ( a )) , a ) T,S ( ((T), ^, ( a )) , a ) (T) ( (S, ^, ( a )) , a ) S ( (T, ^, ( a )) , a ) ^ ( (T, S, ( a )) , a ) T,S ( (T, ( a )) , a ) a ((T,(S)),a) S ( (T, ( T )) , a ) (T) ( (T, S) , a ) T,S ( (T) , a ) (T) ( S ,a ) S ( T, a ) a ( T,S ) T,S ( T ) (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)# 规约 S→a 6 #(((T , a),^,(a)),a)# 规约T→S 7 #(((T, a),^,(a)),a)# 进 8 #(((T, a ),^,(a)),a)# 进 9 #(((T,S ),^,(a)),a)# 规约 S→a 10 #(((T ),^,(a)),a)# 规约T→T,S 11 #(((T) ,^,(a)),a)# 进 12 #((S ,^,(a)),a)# 规约S→(T) 13 #((T ,^,(a)),a)# 规约TS 14 #((T, ^,(a)),a)# 进 15 #((T,^ ,(a)),a)# 进 16 #((T,S ,(a)),a)# 规约S→^ 17 #((T ,(a)),a)# 规约T→T,S 18 #((T, (a)),a)# 进 19 #((T,( a)),a)# 进 20 #((T,(a )),a)# 进 21 #((T,(S )),a)# 规约S→a 22 #((T,(T )),a)# 规约T→S 23 #((T,(T) ),a)# 进 24 #((T,S ),a)# 规约S→(T) 25 #((T ),a)# 规约T→T,S 26 #((T) ,a)# 进 27 #(S ,a)# 规约S→(T) 28 #(T a)# 规约T→S 29 #(T, a)# 进 30 #(T, a )# 进 31 #(T, S )# 规约S→a 32 #(T )# 规约T→T,S 33 #(T) # 进 34 #S # 规约S→(T) 35 #S # 接受 语法树: S 17 ( T ) 16 14 T , S 15 S 13 a ( T ) 12 ( T ) 8 T , S 11 6 T , S 7 ( T ) 10 S 5 ^ S 9 ( T ) 4 a 2 T , S 3 S a 1 a 其中的编号指示的结点为每一步规约所形成的语法树的根结点。 3(1) FIRSTVT(S)={a,^,(} FIRSTVT(T)={,,a,^,(} LASTVT(S)={a,^,)} LASTVT(T)={,,a,^,)} (2) a ^ ( ) , a > > ^ > > ( < < < = < ) > > , < < < > > 是算符文法,并且是算符优先文法 (3)优先函数 a ^ ( ) , f 4 4 2 4 4 g 5 5 5 2 3 也可以最后指定f (#) ,g (#) 的值。 (4)算符优先分析过程。 步骤 符号栈 输入串 动作 0 # (a,(a ,a))# 预备 1 #( a,(a ,a))# 进 2 #(a ,(a ,a))# 进 3 #(S ,(a ,a))# 规约S→a 4 #(S, (a ,a))# 进 5 #(S,( a ,a))# 进 6 #(S,(a ,a))# 进 7 #(S,(S ,a))# 规约S→a 8 #(S,(S, a))# 进 9 #(S,(S,a ))# 进 10 #(S,(S,S ))# 规约S→a 11 #(S,(T ))# 规约T→T,S 12 #(S,(T) )# 进 13 #(S,S )# 规约S→(T) 14 #(T )# 规约T→T,S 15 #(T) # 进 16 #S # 规约S→(T) 17 #S # 接受 5.拓广的文法为:S’→S , S→AS, S→b ,A→SA, A→a, (1) 所有的 LR(0)项目: 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. (2)LR(0)项目集规范族: I0 S’→·S , S→·AS , S→·b , A→·SA , A→·a I0 S I 1 S’→S· , S→A·S , S→b· , A→S·A, A→a· , A→·SA A I 2 S→A·S, , S→·AS , S→·b , A→·SA , A→·a a I 3 A→a· b I 4 S→b· I 1 S I 5 A→S·A, A→·SA , A→·a , S→·AS , S→·b A I 6 A→SA· , S→A·S , S→·AS , S→·b , A→·SA , A→·a, a (I 3) b (I 4) I 2 S I 7 S→AS· , A→S·A, A→·SA , A→·a, S→·AS, S→·b, A( I 2 ) a (I 3 ) b (I 4 ) I 5 S (I 5) A (I 6) a (I 3) b (I 4) I 6 S (I 7) A (I 2 ) a (I 3) b (I 4) I 7 S (I 5) A (I 6) a (I 3) b (I 4) (3) I 1 中存在移进规约冲突S’→S· , A→·a , S→·b 但是FOLLOW(S’)={#} 所以该冲突可以消除 I 6中存在移进规约冲突:A→SA· ,S→·b ,A→·a 但是FOLLOW(A)={b, a } 所以该冲突不可以消除。 I 7中存在移进规约冲突:S→AS· ,A→·a ,S→·b但是FOLLOW(S)={a , b ,# } 所以该冲突不可以消除。 所以该文法不是SLR文法。 (4) I0 [S’→·S , # ] , [S→·AS , # ] ,[ S→·b , # ], [ A→·SA ,a/b ] ,[ A→·a ,a/b] I0 S I 1 [ S’→S·,# ] , [S→A·S,a/b] , [S→b·,a/b ] , [A→S·A, a /b ], [A→a· , a/b] , [ A→·SA, a/b] A I 2 [S→A·S, #] , [S→·AS , #], [ S→·b , #], [A→·SA ,a/b ],[ A→·a, a/b ] a I 3 : [ A→a·,a/b], b I 4 [ S→b·,#] I 1 S I 5 [A→S·A, a/b ], [A→·SA , a/b ],[ A→·a , a/b ],[ S→·AS , a/b ], [ S→·b, a/b ] A I 6 [A→SA·,a/b ], [ S→A·S , a/b ], [ S→·AS , a/b ], [S→·b , a/b ], [A→·SA , a/b ], [A→·a, a/b ] a (I 3) b I7 [S→b·, a/b ] I 2 S I 8 [ S→AS·,#] , [A→S·A, a/b ], [A→·SA ,a/b] , [A→·a, a/b] , [S→·AS, a/b], [ S→·b, a/b] A I 9 [ S→A·S , #/a/b ], [ S→·AS , #/a/b ] , [S→·b ,#/ a/b ], [A→·SA , a/b ], [A→·a, a/b ] a (I 3 ) b I 10 [S→b·, #/a/b ] I 5 S (I 5) A (I 6) a (I 3) b (I 7) I 6 S I 11 : [ S→AS·, a/b] , [A→S·A, a/b ], [A→·SA , a/b ], [A→·a, a/b ] , A I 12 : [ S→A·S , a/b ], [ S→·AS , a/b ], [ S→·b, a/b], [A→·SA , a/b ], [A→·a, a/b ] a (I 3) b (I 7) I 8 S( I 5 ) A( I 6 ) a( I 3) b( I 7) I 9 S I 13 : [ S→AS·, #/a/b] , [A→S·A, a/b ], [A→·SA , a/b ], [A→·a, a/b ] , [ S→·AS ,a/b ] , [S→·b , a/b ] A (I 9 ) a (I 3 ) b (I 10 ) I 11 S( I 5 ) A( I 6 ) a( I 3) b( I 7) I 12 S( I 11 ) A( I 12 ) a( I 3) b( I 7) I 13 S( I 5 ) A( I 6 ) a( I 3) b( I 7) I 6, I 11, I 13 中存在移进规约冲突,所以该文法不是LR(1)的和LALR的。 (附上网络版的答案) (2) 1 9 8 7 S A S 11 10 0 a
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服