版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上编译原理课后习题答案第一章 第 4 题 对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、 代码生成)报告的。 (1) else 没有匹配的if (2) 数组下标越界 (3) 使用的函数没有定义 (4) 在数中出现非数字字符 答案: (1) 语法分析 (2) 语义分析 (3) 语法分析 (4) 词法分析 编译原理课后习题答案第三章 第1 题 文法G(A,B,S,a,b,c,P,S)其中P 为: SAc|aB Aab
2、Bbc 写出L(GS)的全部元素。 答案: L(GS)=abc 第2 题 文法GN为: ND|ND D0|1|2|3|4|5|6|7|8|9 GN的语言是什么? 答案: GN的语言是V+。V=0,1,2,3,4,5,6,7,8,9 N=>ND=>NDD. =>NDDDD.D=>D.D 或者:允许0 开头的非负整数? 第题 为只包含数字、加号和减号的表达式,例如9-25,3-1,等构造一个文法。 答案: GS: S->S+D|S-D|D D->0|1|2|3|4|5|6|7|8|9 第4 题 已知文法GZ: ZaZb|a
3、b 写出L(GZ)的全部元素。 答案: Z=>aZb=>aaZbb=>aaa.Z.bbb=> aaa.ab.bbb L(GZ)=anbn|n>=1 第5 题 写一文法,使其语言是偶正整数的集合。 要求: (1) 允许0 打头; (2)不允许0 打头。 答案: (1)允许0 开头的偶正整数集合的文法 ENT|D TNT|D ND|1|3|5|7|9 D0|2|4|6|8 (2)不允许0 开头的偶正整数集合的文法 ENT|D TFT|G ND|1|3|5|7|9 D2|4|6|8 FN|0
4、 GD|0 第6 题 已知文法G: <表达式>:=<项><表达式><项> <项>:=<因子><项>*<因子> <因子>:=(<表达式>)i 试给出下述表达式的推导及语法树。 ()i+(i+i) ()i+i*i 答案: <表达式> <表达式> + <项> <因子> <表达式> <表达式> + <项> <因子> i <项>
5、<因子> i <项> <因子> i ( ) (5) <表达式> =><表达式><项> =><表达式><因子> =><表达式>(<表达式>) =><表达式>(<表达式><项>) =><表达式>(<表达式><因子>) =><表达式>(<表达式>i) =><表达式>(<项>i) =><表达式
6、>(<因子>i) =><表达式>(ii) =><项>(ii) =><因子>(ii) =>i(ii) <表达式> <表达式> + <项> <项> * <因子> <因子> i <项> <因子> i i (6) <表达式> =><表达式><项> =><表达式><项>*<因子> =>
7、<表达式><项>*i =><表达式><因子>*i =><表达式>i*i =><项>i*i =><因子>i*i =>ii*i 第7 题 证明下述文法G表达式是二义的。 表达式=a|(表达式)|表达式运算符表达式 运算符=+|-|*|/ 答案: 可为句子a+a*a 构造两个不同的最右推导: 最右推导1 表达式表达式运算符表达式 表达式运算符a 表达式* a 表达式运算符表达式* a 表达式运算符a * a 表达式+&
8、#160;a * a a + a * a 最右推导2 表达式表达式运算符表达式 表达式运算符表达式运算符表达式 表达式运算符表达式运算符 a 表达式运算符表达式 * a 表达式运算符a * a 表达式+ a * a a + a * a 第8 题 文法GS为: SAc|aB Aab Bbc 该文法是否为二义的?为什么? 答案: 对于串abc (1)S=>Ac=>abc (2)S
9、=>aB=>abc 即存在两不同的最右推导。所以,该文法是二义的。 或者: 对输入字符串abc,能构造两棵不同的语法树,所以它是二义的。 S a B b c S A c a b 第9 题 考虑下面上下文无关文法: SSS*|SS+|a (1)表明通过此文法如何生成串aa+a*,并为该串构造语法树。 S S S * S S + a a a (2)GS的语言是什么? 答案: (1)此文法生成串aa+a*的最右推导如下 S=>SS*=>SS*=>Sa*=>
10、SS+a*=>Sa+a*=>aa+a* (2)该文法生成的语言是:*和+的后缀表达式,即逆波兰式。 第10 题 文法SS(S)S| (1) 生成的语言是什么? (2) 该文法是二义的吗?说明理由。 答案: () 嵌套的括号 () 是二义的,因为对于()()可以构造两棵不同的语法树。 第11 题 令文法GE为: ET|E+T|E-T TF|T*F|T/F F(E)|i 证明E+T*F 是它的一个句型,指出这个句型的所有短语、直接短语和句柄。 答案: 此句型对应语法树如右,故为此文法一个句型。 或者:因为存在推导序列
11、: E=>E+T=>E+T*F,所 以 E+T*F 句型 此句型相对于E 的短语有:E+T*F;相对于T 的短语 有T*F 直接短语为:T*F 句柄为:T*F 第13 题 一个上下文无关文法生成句子abbaa 的推导树如下: (1)给出串abbaa 最左推导、最右推导。 (2)该文法的产生式集合P 可能有哪些元素? (3)找出该句子的所有短语、直接短语、句柄。 B a S A B S a S B A b b a 答案: (
12、1)串abbaa 最左推导: S=>ABS=>aBS=>aSBBS=>aBBS=>abBS=>abbS=>abbAa=>abbaa 最右推导: S=>ABS=>ABAa=>ABaa=>ASBBaa=>ASBbaa=>ASbbaa=>Abbaa=>abbaa (2)产生式有:SABS |Aa| Aa BSBB|b 可能元素有: aa ab abbaa aaabbaa (3)该句子的短语有: a 是相对
13、A 的短语 是相对S 的短语 b 是相对B 的短语 bb 是相对B 的短语 aa 是相对S 的短语 abbaa 是相对S 的短语 直接短语有:a b 句柄是:a 编译原理课后习题答案第四章 第1 题 构造下列正规式相应的DFA. () 1(0|1)*101 () (1010*|1(010)*1)*0 () a(a|b)*|ab*a)*b () b(ab)*|bb)*ab 答案: (1) 先构造NFA: 用
14、子集法将NFA 确定化 . 0 1 X . A A A AB AB AC AB AC A ABY ABY AC AB 除X,A 外,重新命名其他状态,令AB 为B、AC 为C、ABY 为D,因为D 含有Y(NFA 的终态),所以D 为终态。 . 0 1 X . A A A B B C B C A D D
15、60;C B DFA 的状态图:: (2)先构造NFA: X 1 A B 1 C 0 D 1 E 0 F 1 G 0 H 1 I 0 J 1 K L 0 Y 用子集法将NFA 确定化 0 1 X X T0=X A A ABFL T1= ABFL Y CG Y Y CG C
16、GJ T2= Y T3= CGJ DH K DH DH K ABFKL T4= DH EI EI ABEFIL T5= ABFKL Y CG T6= ABEFIL EJY CG EJY ABEFGJLY T7= ABEFGJLY EHY CGK EHY ABEFHLY CGK ABCFGJKL T8= ABEFHLY EY CGI EY ABEFL
17、Y CGI CGJI T9= ABCFGJKL DHY CGK DHY DHY T10= ABEFLY EY CG T11= CGJI DHJ K DHJ DHJ T12= DHY EI T13= DHJ EIK EIK ABEFIKL T14= ABEFIKL EJY CG 将T0、T1、T2、T3、T4、T5、T6、T7、T8、T9、T10、T11、T12、T13、T14重新命名,分别用0、
18、1、2、3、4、5、6、7、8、9、10、11、12、13、14 表示。因为2、7、8、10、12 中含有Y, 所以它们都为终态。 0 1 0 1 1 2 3 2 3 4 5 4 6 5 2 3 6 7 3 7 8 9 8 10 11 9 12 9 10 10 3 11 13 5 12 6 13 14 14 7 3 0
19、;1 0 12 1 2 7 10 8 3 4 5 6 9 11 13 14 1 1 0 1 0 1 0 1 1 0 1 1 0 1 0 1 0 1 0 1 0 1 (3) 先构造NFA: 先构造NFA: X a A B a,b D a E a F C Y b b 用子集法将NFA 确定化 a b X X T0=X A A ABCD T1=ABCD BE BY BE
20、;ABCDE BY ABCDY T2=ABCDE BEF BEY BEF ABCDEF BEY ABCDEY T3=ABCDY BE BY T4=ABCDEF BEF BEY T5=ABCDEY BEF BEY 将T0、T1、T2、T3、T4、T5重新命名,分别用0、1、2、3、4、5 表示。因为3、5 中含有Y, 所以它们都为终态。 a b 0 1 1 2 3 2 4 5 3 2 3
21、4 4 5 5 4 5 0 a 1 b 3 2 a 5 a 4 b a b a b a b (4) 先构造NFA: X A b B a F b G b H E Y a C D b I b 用子集法将NFA 确定化: a b X X T0=X A A ABDEF T1=ABDEF CI G CI CI G
22、 G T2=CI DY DY ABDEFY T3=G H H ABEFH T4=ABDEFY CI G T5=ABEFH CI G 将T0、T1、T2、T3、T4、T5重新命名,分别用0、1、2、3、4、5 表示。因为4 中含有Y, 所以它为终态。 a b 0 1 1 2 3 2 4 3 5 4 2 3 5 2 3 DFA 的状态图: 0 b 1
23、b 2 a 4 5 3 b b a b a b 第题 已知NFA(x,y,z,0,1,M,x,z),其中:M(x,0)=z,M(y,0)=x,y,,M(z,0)=x,z, M(x,1)=x,M(y,1)=,M(z,1)=y,构造相应的DFA。 答案: 先构造其矩阵 0 1 x z x y x,y z x,z y 用子集法将NFA 确定化: 0 1 x z x z xz y xz xz xy y xy xy xyz x xyz&
24、#160;xyz xy 将x、z、xz、y、xy、xyz 重新命名,分别用A、B、C、D、E、F 表示。因为B、C、F 中含有z,所以它为终态。 0 1 A B A B C D C C E D E E F A F F E DFA 的状态图: A 0 1 0 F E D 0 B 1 0 1 0 1 0 1 C 第3 题 将下图确定化: 答案: 用子集法将NFA 确定化: . 0 1 S
25、160;VQ QU VQ VZ QU QU V QUZ VZ Z Z V Z . QUZ VZ QUZ Z Z Z 重新命名状态子集,令VQ 为A、QU 为B、VZ 为C、V 为D、QUZ 为E、Z 为F。 . 0 1 S A B A C B B D E C F F D F . E
26、0;C E F F F DFA 的状态图: 第4 题 将下图的(a)和(b)分别确定化和最小化: 答案: 初始分划得 0:终态组0,非终态组1,2,3,4,5 对非终态组进行审查: 1,2,3,4,5a 0,1,3,5 而0,1,3,5既不属于0,也不属于1,2,3,4,5 4 a 0,所以得到新分划 1:0,4,1,2,3,5 对1,2,3,5进行审查: 1,5 b 4 2,3 b 1,2,3,5,故得到新分划 2:0,4,1, 5,2,3 1, 5
27、160;a 1, 5 2,3 a 1,3,故状态2 和状态3 不等价,得到新分划 3:0,2,3,4,1, 5 这是最后分划了 最小DFA: 第5 题 构造一个DFA,它接收=0,1上所有满足如下条件的字符串:每个1 都有0 直接跟在 右边。并给出该语言的正规式。 答案: 按题意相应的正规表达式是(0*10)*0*,或0*(0 | 10)*0* 构造相应的DFA,首先构造NFA 为 用子集法确定化: I I0 I1 X,0,1,3,Y
28、0,1,3,Y 2 1,3,Y 0,1,3,Y 0,1,3,Y 1,3,Y 1,3,Y 2 2 2 重新命名状态集: S 0 1 1 2 3 4 2 2 4 4 3 3 3 DFA 的状态图: 可将该DFA 最小化: 终态组为1,2,4,非终态组为3,1,2,40 1,2,4,1,2,41 3,所以1,2,4 为等价状 态,可合并。 第题 设无符号数的正规式为: =dd*|dd*.dd*|.dd*|dd*10(s|)dd* |10(s|)dd*|.dd*10(s|)dd* |dd*.dd*10(s|)dd* 化简,画出的DF
29、A,其中d=0,1,2,9,s=, 答案: 先构造NFA: X d . B d F G d H 10 d A C 10 d D s E d Y d s d 用子集法将NFA 确定化: s 10 d X XA T0=XA B F A B B F FG A A T1=B C C C T2=FG G H G G H H T3=A B F A T4=C
30、;D C D DE T5=G H T6=H H T7=DE E Y E E Y Y T8=E Y T9=Y Y 将XA、B、FG、A、C、G、H、DE、E、Y 重新命名,分别用0、1、2、3、4、5、6、 7、8、9 表示。终态有0、3、4、6、9。 s 10 d 0 1 2 3 1 4 2 5 6 3 1 2 3 4 7 4 5
31、60;6 6 6 7 8 9 8 9 9 9 DFA 的状态图: d 6 2 5 d 3 d d 4 7 8 9 0 1 10 d s 10 10 d d s d d d 第7 题 给文法GS: SaA|bQ AaA|bB|b BbD|aQ QaQ|bD|b DbB|aA EaB|bF FbD|aE|b 构造相应的最小的DFA。 答案: 先构造其NFA: S a A a Z Q b B D a E b F b b a b a a b b b b a b 用子集法将NFA 确定化: a&
32、#160;b S A Q A A BZ Q Q DZ BZ Q D DZ A B D A B B Q D 将S、A、Q、BZ、DZ、D、B 重新命名,分别用0、1、2、3、4、5、6 表示。因为3、 4 中含有z,所以它们为终态。 a b 0 1 2 1 1 3 2 2 4 3 2 5 4 1 6 5 1
33、160;6 6 2 5 DFA 的状态图: 0 a a 5 2 b 3 a a b 4 1 6 b a a b b b a b 令P0(0,1,2,5,6,3,4)用b进行分割: P1(0,5, 6,1,2,3,4)再用b进行分割: P2(0,5, 6,1,2,3,4)再用a、b 进行分割,仍不变。 再令为A,1,2为B,3,4为C,5,6为D。 最小化为: A a , b D C a a B b a b b 第题 给出下述文法所对应的正规式: S0A|1B A1S|1 B0S|0 答案: 解方程组S
34、160;的解: S=0A|1B A=1S|1 B=0S|0 将A、B 产生式的右部代入S 中 S=01S|01|10S|10=(01|10)S|(01|10) 所以:S= (01|10)*(01|10) 第9 题 将下图的DFA 最小化,并用正规式描述它所识别的语言。 1 a 2 6 c 3 c b 5 4 7 b b a b b b d d a 答案: 令P0(1,2,3,4,5,6,7)用b进行分割: P1(1,2,3,4,5,6,7)再用a、b、c、d进行分割,仍不变。 再令1,2为A,3,4为B,5为C,6,7为D。
35、 最小化为: A a C D b d B b c a b r=b*a(c|da)*bb*=b*a(c|da)*b+ 编译原理课后习题答案第五章 第1 题 对文法GS Sa|(T) TT,S|S (1) 给出(a,(a,a)和(a,a),(a),a)的最左推导。 (2) 对文法G,进行改写,然后对每个非终结符写出不带回溯的递归子程序。 (3) 经改写后的文法是否是LL(1)的?给出它的预测分析表。 (4) 给出输入串(a,a)#的分析过程,并说明该串是否为G 的句子。 答案: (1) 对(a,(a,a)的最左推导为:
36、 S (T) (T,S) (S,S) (a,S) (a,(T) (a,(T,S) (a,(S,S) (a,(a,S) (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),(T),S) (a,a),(S),S) (a,a),(a),S) (a,a),(a),a) (2)
37、0;改写文法为: 0) Sa 1) S 2) S( T ) 3) TS N 4) N, S N 5) N 非终结符 FIRST 集 FOLLOW 集 S a,( #,) T a,( ). N ,. ). 对左部为N 的产生式可知: FIRST (, S N)=, FIRST ()= FOLLOW (N)=) 由于SELECT(N
38、 , S N)SELECT(N ) =, )= 所以文法是LL(1)的。 预测分析表(Predicting Analysis Table) a ( ) , # S a (T) T S N S N S N N , S N 也可由预测分析表中无多重入口判定文法是LL(1)的。 (3) 对输入串(a,a)#的分析过程
39、为: 栈(STACK) 当前输入符 (CUR_CHAR) 剩余输入符 (INOUT_STRING) 所用产生式 (OPERATION) #S #)T( #)T #)NS #)Na #)N #)NS, #)NS #)Na #)N #) # ( ( a a a , , a a ) ) # a,a)#. a,a)#. ,a)#. ,a)#. ,a)#. a)#. a)#. )#. )#. #. #. S(T) . TSN Sa . N,SN . Sa . N 可见输入串(a,a)#是文法的句子。 第3 题 已知文法GS: SMH|a HLSo| KdML| LeHf MK|bLM 判断G&
40、#160;是否是LL(1)文法,如果是,构造LL(1)分析表。 答案: 文法展开为: 0) SM H 1) Sa 2) HL S o 3) H 4) Kd M L 5) K 6) Le H f 7) MK 8) Mb L M 非终结符 FIRST 集 FOLLOW 集 S a,d,b,e #,o. M d,b. e,#,o. H
41、;,e. #,f,o. L e. a,d,b,e,o,# K d,. e,#,o. 对相同左部的产生式可知: SELECT(SM H)SELECT(Sa) = d,b ,e,#,o a = SELECT(HL S o)SELECT(H) = e #,f,o = SELECT(Kd M L)SELECT(K) = d &
42、#160;e,#,o = SELECT(MK)SELECT(Mb L M) = d,e,#,o b = 所以文法是LL(1)的。 预测分析表: a o d e f b # S a MH MH MH MH MH M K K K bLM K H LSo L eHf K
43、160;dML 由预测分析表中无多重入口也可判定文法是LL(1)的。 第7 题 对于一个文法若消除了左递归,提取了左公共因子后是否一定为LL(1)文法?试对下面 文法进行改写,并对改写后的文法进行判断。 ()AbaB| BAbb|a (2) AaABe|a BBb|d (3) SAa|b ASB Bab 答案: ()先改写文法为: 0) AbaB 1) A 2) BbaBbb 3) Bbb 4) Ba 再改写文法为: 0) AbaB 1) A 2) BbN 3)
44、 Ba 4) NaBbb 5) Nb FIRST FOLLOW A b # B b,a #,b N b,a #,b 预测分析表: a b # A baB B a bN N aBbb b 由预测分析表中无多重入口判定文法是LL(1)的。 (2) 文法: AaABe|a BBb|d 提取左公共因子和消除左递归后文法变为: 0) Aa N 1) NA B e 2) N 3) Bd N1 4) N1b N1 5) N1 非终结符 FIRST 集 FOLLOW 集 A a. #,d B d. e. N a, #,d N1 b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026湖北鄂州人才集团有限公司招聘员工派往鄂州市国企工作8人考试参考题库及答案解析
- 2026贵州贵阳市第二十八中学教师招聘3人考试参考试题及答案解析
- Eras护理效果评估与改进
- 2026春季贵州贵阳市观山湖区百花湖幼儿园学期招聘临聘教师1人考试参考题库及答案解析
- 心理护理在心身疾病患者心理康复中的应用
- 2026重庆外语外事学院招聘考试备考题库及答案解析
- 2026重庆飞驶特人力资源管理有限公司派往重庆市教育评估院劳务派遣人员招聘1人考试备考题库及答案解析
- 2026辽宁大连市旅顺口区征兵考试参考试题及答案解析
- 2026淄博莲池骨科医院招聘(44人)笔试参考题库及答案解析
- 2026云南昆明市官渡区北京八十学校招聘4人笔试模拟试题及答案解析
- 【黑产大数据】2025年互联网黑灰产趋势年度总结
- 2026年山东圣翰财贸职业学院单招综合素质考试备考试题带答案解析
- 2025年退休党支部书记抓党建工作述职报告
- 水下焊接技术培训课件
- 2026年小红书运营账号人设差异化打造调研
- 大班幼儿劳动教育的现状与对策研究
- 2025年四川省绵阳市中考数学试卷附解析答案
- 2026年包头铁道职业技术学院单招职业适应性测试题库及答案解析(名师系列)
- 中医药科研课题申报技巧
- 2025中国华电集团有限公司重庆分公司校园招聘(第一批)考前自测高频考点模拟试题附答案
- 检验检测机构内审检查表模板下载
评论
0/150
提交评论