蒋立源编译原理第三版第三章习题与答案

合集下载

编译原理练习答案蒋宗礼第三章

编译原理练习答案蒋宗礼第三章
由于只关心0的个数的奇偶数我们可以把二进制串分成多段来考虑第为止这一段包含1个0并且0的前面有0对于剩下的二进制串按照每段包含两个0的方式去划分即以0开始以0结尾中间可以个或多个1如果一个二进制串被这样划分完后剩下的部分如果全部是全1串这些串在前面划分的串之间或最后则该二进制串就具有奇数个0所以该二进制可以这样描述
在整个分裂过程中,所有新结点均用不同的名字,保留 X 和 Y 为全图的唯一初态结点 和终态结点。至此,我们得到了一个非确定有限自动机M,
第二部分
例题与习题
重点与难点
重点:词法分析器的输入、输出,用于识别符号的状态转移图的构造,根据状态转移图实现 词法分析器。 难点:词法的正规文法表示、正规表达式表示、状态转移图表示,它们之间的转换。
l, d 初态 ① l

其它
终态

例 4 叙述下面的正规式描述的语言,并画出接受该语言的最简 DFA 的状态转换图。 * * (1|01) 0 【解】描述的语言是,所有不含子串 001 的 0 和 1 的串。
例 5 给定如下正规式 0(0|1)*1 (1) 写出相应的正规文法。 (2) 画出相应的状态转移图。 【解】 (1) 引入非终结符 S, A, S → 0(0|1)*1 →0A + + A →(0|1)*1→(ε | (0|1) )1→1| (0|1) 1→1| (0|1) (0|1)*1→1| 0A|1A 得到正规文法 G[S]: S 0A A 0A|1A|1 (2) (1)中给出的是一个右线性文法。 。 按照由右线性正规文法构造状态转换图的方法,构造相应的状态转移图如图 1
则(U|V) 、 (U·V)和(U)*也都是正规式,它们所表示的正规集分别为 L(U) ∪L(V)、 L (U) L (V)(连接积)和(L (U))*(闭包) 。 仅通过有限次使用上述三步骤定义的表达式才是∑上的正规式, 仅由这些正规式所表示 的字集才是∑上的正规集。 令 U、V 和 W 均为正规式,则下述关系成立: (1)U|V=V|U(交换律) (2)U|(V|W)=(U|V)W 或 U(VW)=(UV)W (结合律) (3)U(V|W)=UV|UW 或 (V|W)U=VU|WU(分配律) (4)ε U=Uε =U 若两个正规式所表示的正规集相同,则认为二者等价。 例如:b(ab)*=(ba)*b, (a|b)*=(a*b*)*。 注意: a*b*、(a|b)* 、(ab)* 、a*|b*相互都不等价,它们表示的含义如图所示

蒋立源编译原理 第三版 第三章 习题与答案(修改后)

蒋立源编译原理 第三版 第三章 习题与答案(修改后)

第3章习题3-1 试构造一右线性文法,使得它与如下得文法等价S→AB A→UT U→aU|a D→bT|b B→cB|c 并根据所得得右线性文法,构造出相应得状态转换图。

3-2 对于如题图3-2所示得状态转换图(1) 写出相应得右线性文法;(2) 指出它接受得最短输入串;(3) 任意列出它接受得另外4个输入串;(4) 任意列出它拒绝接受得4个输入串。

3-3 对于如下得状态转换矩阵:(1) 分别画出相应得状态转换图;(2) 写出相应得3型文法;(3) 用自然语言描述它们所识别得输入串得特征。

3-4 将如下得NFA确定化与最小化:3-5 将如题图3-5所示得具有ε动作得NFA确定化。

题图3-5 具有ε动作得NFA3-6 设有文法G[S]:S→aA A→aA|bB B→bB|cC|c C→cC|c 试用正规式描述它所产生得语言。

3-7 分别构造与如下正规式相应得NFA。

(1) ((0* |1)(1* 0))*(2) b|a(aa*b)*b3-8 构造与正规式(a|b)*(aa|bb)(a|b)*相应得DFA。

第3章习题答案3-1 解:根据文法知其产生得语言就是:L[G]={a m b n c i| m,n,i≧1}可以构造与原文法等价得右线性文法:S→aA A→aA|bB B→bB|cC|c C→cC|c 其状态转换图如下:3-2 解:(1) 其对应得右线性文法就是G[A]:A →0D B→0A|1C C→0A|1F|1D→0B|1C E→0B|1C F→1A|0E|0(2) 最短输入串为011(3) 任意接受得四个输入串为:0110,0011,000011,00110(4) 任意拒绝接受得输入串为:0111,1011,1100,10013-3 解:(1) 相应得状态转换图为:(2) 相应得3型文法为:(ⅰ) S→aA|bS A→aA|bB|b B→aB|bB|a|b(ⅱ) S→aA|bB|a A→bA|aC|a|b B→aB|bC|b C→aC|bC|a|b(ⅲ) S→aA|bB|b A→aB|bA|a B→aB|bB|a|b(ⅳ) S→bS|aA A→aC|bB|a B→aB|bC|b C→aC|bC|a|b(3) 用自然语言描述得输入串得特征为:(ⅰ) 以任意个(包括0个)b开头,中间有任意个(大于1)a,跟一个b,还可以有一个由a,b组成得任意字符串。

《编译原理》课后习题答案第三章第3章文法和语言第1

《编译原理》课后习题答案第三章第3章文法和语言第1

《编译原理》课后习题答案第三章第3 章文法和语言第1 题文法G=({A,B,S},{a,b,c},P,S)其中P 为:S→Ac|aBA→abB→bc写出L(G[S])的全部元素。

答案:L(G[S])={abc}第2 题文法G[N]为:N→D|NDD→0|1|2|3|4|5|6|7|8|9G[N]的语言是什么?答案:G[N]的语言是V+。

V={0,1,2,3,4,5,6,7,8,9}N=>ND=>NDD.... =>NDDDD...D=>D......D或者:允许0 开头的非负整数?第3题为只包含数字、加号和减号的表达式,例如9-2+5,3-1,7等构造一个文法。

答案:G[S]:S->S+D|S-D|DD->0|1|2|3|4|5|6|7|8|9第4 题已知文法G[Z]:Z→aZb|ab写出L(G[Z])的全部元素。

盛威网()专业的计算机学习网站 1《编译原理》课后习题答案第三章答案:Z=>aZb=>aaZbb=>aaa..Z...bbb=> aaa..ab...bbbL(G[Z])={anbn|n>=1}第5 题写一文法,使其语言是偶正整数的集合。

要求:(1) 允许0 打头;(2)不允许0 打头。

答案:(1)允许0 开头的偶正整数集合的文法E→NT|DT→NT|DN→D|1|3|5|7|9D→0|2|4|6|8(2)不允许0 开头的偶正整数集合的文法E→NT|DT→FT|GN→D|1|3|5|7|9D→2|4|6|8F→N|0G→D|0第6 题已知文法G:<表达式>::=<项>|<表达式>+<项><项>::=<因子>|<项>*<因子><因子>::=(<表达式>)|i试给出下述表达式的推导及语法树。

(5)i+(i+i)(6)i+i*i盛威网()专业的计算机学习网站 2 《编译原理》课后习题答案第三章答案:<表达式><表达式> + <项><因子><表达式><表达式> + <项><因子>i<项><因子>i<项><因子>i( )(5) <表达式>=><表达式>+<项>=><表达式>+<因子>=><表达式>+(<表达式>)=><表达式>+(<表达式>+<项>)=><表达式>+(<表达式>+<因子>)=><表达式>+(<表达式>+i)=><表达式>+(<项>+i)=><表达式>+(<因子>+i)=><表达式>+(i+i)=><项>+(i+i)=><因子>+(i+i)=>i+(i+i)<表达式><表达式> + <项><项> * <因子><因子> i<项><因子>ii(6) <表达式>=><表达式>+<项>=><表达式>+<项>*<因子>=><表达式>+<项>*i=><表达式>+<因子>*i=><表达式>+i*i=><项>+i*i=><因子>+i*i=>i+i*i盛威网()专业的计算机学习网站 3《编译原理》课后习题答案第三章第7 题证明下述文法G[〈表达式〉]是二义的。

编译原理3答案

编译原理3答案

编译原理3答案【篇一:编译原理试题及答案3】填空题:1、编译方式与解释方式的根本区别在于(是否生成目标代码)。

2、对编译程序而言,输入数据是(源程序),输出结果是(目标程序)。

3、如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段:(编译阶段)和(运行阶段)。

4、如果编译程序生成的目标程序是汇编语言程序,则源程序的执行分成三个阶段:(编译阶段)、(汇编阶段)和(运行阶段)。

5、自顶向下语法分析方法会遇到的主要问题有(回溯)和((左递归带来的)无限循环)。

6、ll(k)分析法中,第一个l的含义是(从左到右进行分析),第二个l的含义是(每次进行最左推导),“k”的含义是(向输入串中查看k个输入符号)。

7、ll(1)分析法中,第一个l的含义是(从左到右进行分析),第二个l的含义是(每次进行最左推导),“1”的含义是(向输入串中查看1个输入符号)。

8、自顶向下语法分析方法的基本思想是:从(识别符号)出发,不断建立(直接推导),试图构造一个推导序列,最终由它推导出与输入符号相同的(符号串)。

9、自底向上语法分析方法的基本思想是:从待输入的符号串开始,利用文法的规则步步向上进行(直接归约),试图(归约)到文法的(识别符号|开始符号)。

10、lr(0)分析法的名字中,“l”的含义是(从左到右进行分析),“r”的含义是(采用最右推导的逆过程---最左归约),“0”的含义是(向貌似句柄的符号串后查看0个输入符号)。

11、lr(1)分析法的名字中,“l”的含义是(从左到右进行分析),“r”的含义是(采用最右推导的逆过程---最左归约),“1”的含义是(向貌似句柄的符号串后查看1个输入符号)。

12、slr(1)分析法的名字中,“s”的含义是(简单的),“l”的含义是(从左到右进行分析),“r”的含义是(采用最右推导的逆过程---最左归约),“1”的含义是(向貌似句柄的符号串后查看1个输入符号)。

13、在编译过程中,常见的中间语言形式有(逆波兰表示)、(三元式)、(四元式)和(树形表示)。

编译原理第三版课后习题答案

编译原理第三版课后习题答案

编译原理第三版课后习题答案编译原理是计算机科学中的一门重要课程,它研究的是如何将高级程序语言转换为机器语言的过程。

而《编译原理》第三版是目前被广泛采用的教材之一。

在学习过程中,课后习题是巩固知识、提高能力的重要环节。

本文将为读者提供《编译原理》第三版课后习题的答案,希望能够帮助读者更好地理解和掌握这门课程。

第一章:引论习题1.1:编译器和解释器有什么区别?答案:编译器将整个源程序转换为目标代码,然后一次性执行目标代码;而解释器则逐行解释源程序,并即时执行。

习题1.2:编译器的主要任务是什么?答案:编译器的主要任务是将高级程序语言转换为目标代码,包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等过程。

第二章:词法分析习题2.1:什么是词法分析?答案:词法分析是将源程序中的字符序列划分为有意义的词素(token)序列的过程。

习题2.2:请给出识别下列词素的正则表达式:(1)整数:[0-9]+(2)浮点数:[0-9]+\.[0-9]+(3)标识符:[a-zA-Z_][a-zA-Z_0-9]*第三章:语法分析习题3.1:什么是语法分析?答案:语法分析是将词法分析得到的词素序列转换为语法树的过程。

习题3.2:请给出下列文法的FIRST集和FOLLOW集:S -> aAbA -> cA | ε答案:FIRST(S) = {a}FIRST(A) = {c, ε}FOLLOW(S) = {$}FOLLOW(A) = {b}第四章:语义分析习题4.1:什么是语义分析?答案:语义分析是对源程序进行静态和动态语义检查的过程。

习题4.2:请给出下列文法的语义动作:S -> if E then S1 else S2答案:1. 计算E的值2. 如果E的值为真,则执行S1;否则执行S2。

第五章:中间代码生成习题5.1:什么是中间代码?答案:中间代码是一种介于源代码和目标代码之间的表示形式,它将源代码转换为一种更容易进行优化和转换的形式。

编译原理第三版课后习题解答

编译原理第三版课后习题解答

第二章习题解答之五兆芳芳创作P36-6(1)()L G1是0~9组成的数字串(2)最左推导:最右推导:P36-7G(S)P36-8文法:最左推导:最右推导:语法树:/******************************** *****************/P36-9句子iiiei有两个语法树:P36-10/*****************************/P36-11/***************L1: L2: L3: L4:***************/第三章习题参考答案P64–7 (1)101101(|)*确定化:1 01 1 1 最小化:1 01 1 1 P64–8 (1) (2) (3) P64–12 (a)aa,ba 确定化:给状态编号:aaab b ba 最小化:a ab ab (b)b a b a ba a a1已经确定化了,进行最小化 最小化:a b aP64–14 (1) 01 0 (2):(|1εε0 确定化:给状态编号:YY1 1最小化:1 1第四章P81–1(1) 依照T,S的顺序消除左递归递归子程序:procedure S;beginif sym='a' or sym='^'then abvanceelse if sym='('then beginadvance;T;if sym=')' then advance;else error;endelse errorend;procedure T;beginS;'Tend;procedure 'T;beginif sym=','then beginadvance;S;'Tendend;其中:sym:是输入串指针IP所指的符号advance:是把IP调至下一个输入符号error:是出错诊察程序(2)FIRST(S)={a,^,(} FIRST(T)={a,^,(} FIRST('T)={,,ε} FOLLOW(S)={),,,#} FOLLOW(T)={)} FOLLOW('T)={)}预测阐发表是LL(1)文法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)(4)procedure E;beginif sym='(' or sym='a' or sym='b' or sym='^' then begin T; E' endelse errorendprocedure E';beginif sym='+'then begin advance; E endelse if sym<>')' and sym<>'#' then error endprocedure T;beginif sym='(' or sym='a' or sym='b' or sym='^' then begin F; T' endelse errorendprocedure T';beginif sym='(' or sym='a' or sym='b' or sym='^' then Telse if sym='*' then errorendprocedure F;beginif sym='(' or sym='a' or sym='b' or sym='^' then begin P; F' endelse errorendprocedure F';beginif sym='*'then begin advance; F' endendprocedure P;beginif sym='a' or sym='b' or sym='^'then advanceelse if sym='(' thenbeginadvance; E;if sym=')' then advanceelse errorendelse errorend;P81–3/***************(1)是,满足三个条件.(2)不是,对于A不满足条件3.(3)不是,A、B均不满足条件3.(4)是,满足三个条件.***************/第五章P133–1短语: E+T*F, T*F,直接短语: T*F句柄: T*FP133–2文法:(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)# 归23 #((T,(T) ),a)# 进24 #((T,S ),a)# 归25 #((T ),a)# 归26 #((T) ,a)# 进27 #(S ,a)# 归28 #(T ,a)# 归29 #(T, a)# 进30 #(T,a )# 进31 #(T,S )# 归32 #(T )# 归33 #(T) # 进34 #S # 归P133–3(1)FIRSTVT(S)={a,^,(}FIRSTVT(T)={,,a,^,(}LASTVT(S)={a,^,)}LASTVT(T)={,,a,^,)}(2)G是算符文法,并且是算符优先文法6(3)优先函数(4)栈输入字符串动作# (a,(a,a))# 预备#( a, (a,a))# 进#(a , (a,a))# 进#(t , (a,a))# 归#(t, (a,a))# 进#(t,(a,a))# 进#(t,(a ,a))# 进#(t,(t ,a))# 归#(t,(t, a))# 进#(t,(t,a ))# 进#(t,(t,s ))# 归#(t,(t ))# 归#(t,(t))# 进#(t,s )# 归#(t )# 归#(t )# 进# s # 归successP134–5(1)0.'→⋅S S 1.'→⋅S S 2.S AS →⋅ 3.S A S →⋅4.S AS →⋅5.S b →⋅6.S b →⋅7.A SA →⋅8.A S A →⋅ 9.A SA →⋅ 10.A a →⋅11.A a →⋅(2)Aεε εd确定化:AabS S b69S A ba Abba机关LR(0)项目集标准族也可以用GO 函数来计较得到.所得到的项目集标准族与上图中的项目集一样: 0I ={'→⋅S S ,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅} GO(0I ,a)={ A a →⋅}=1I GO(0I ,b)={ S b →⋅}=2IGO(0I ,S)={ '→⋅S S ,A S A →⋅,A SA →⋅,A a →⋅,S AS →⋅,S b →⋅}=3IGO(0I ,A)={ S A S →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=4I GO(3I ,a)={ A a →⋅}=1I GO(3I ,b)={ S b →⋅}=2IGO(3I ,S)={ A S A →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=5I GO(3I ,A)={ A SA →⋅,S A S →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=6IGO(4I ,a)={ A a →⋅}=1I GO(4I ,b)={ S b →⋅}=2IGO(4I ,S)={ S AS →⋅,A S A →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=7IGO(4I ,A)={ S A S →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=4I GO(5I ,a)={ A a →⋅}=1I GO(5I ,b)={ S b →⋅}=2IGO(5I ,S)={ A S A →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=5I GO(5I ,A)={ A SA →⋅,S A S →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=6IGO(6I ,a)={ A a →⋅}=1I GO(6I ,b)={ S b →⋅}=2IGO(6I ,S)={ S AS →⋅,A S A →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=7IGO(6I ,A)={ S A S →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=4I GO(7I ,a)={ A a →⋅}=1I GO(7I ,b)={ S b →⋅}=2IGO(7I ,S)={ A S A →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=5I GO(7I ,A)={ A SA →⋅,S A S →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=6I项目集标准族为C={1I ,2I ,3I ,4I ,5I ,6I ,7I } (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,因为包含项目[b a AS A / ⋅→],所以遇到搜索符号a 或b 时,应该用AS A →归约.又因为状态5包含项目[b a a A / ⋅→],所以遇到搜索符号a 时,应该移进.因此存在“移进-归约”矛盾,所以这个文法不是LR(1)文法.b b bASa SS aSSA ba a Sb bAA/********************第六章会有点难P164–5(1)E→E1+T {if (E1.type = int) and (T.type = int ) then E.type := intelse E.type := real}E→T {E.type := T.type}T→num.num {T.type := real}T→num {T.type := int}(2)P164–7S→L1|L2lengthL.2)}S→L {S.val:=L.val}L→L1B {L.val:=2*L1.val + B.val;L.length:=L1.length+1}L→B {L.val:=B.c;L.length :=1}B→0 {B.c:=0}B→1 {B.c:=1}***********************/第七章P217–1a*(-b+c) ab@c+*a+b*(c+d/e) abcde/+*+-a+b*(-c+d) a@bc@d+*+if (x+y)*z =0 then (a+b)↑c else a↑b↑c xy+z*0= ab+c↑abc↑↑¥或xy+z*0= P1 jez ab+c↑ P2 jump abc↑↑P1 P2P217–3-(a+b)*(c+d)-(a+b+c)的三元式序列:(1)+, a, b(2)@, (1), -(3)+, c, d(4)*, (2), (3)(5)+, a, b(6)+, (5), c(7)-, (4), (6)直接三元式序列:三元式表:(1)+, a, b(2)@, (1), -(3)+, c, d(4)*, (2), (3)(5)+, (1), c(6)-, (4), (5)直接码表:(1)(2)(3)(4)(1)(5)(6)四元式序列:(1)+, a, b, 1T(2)@, 1T, -, 2T(3)+, c, d, 3T(4)*, 2T, 3T, 4T(5)+, a, b, 5T(6)+, 5T, c, 6T(7)-, 4T, 6T, 7TP218–4自下而上阐发进程中把赋值句翻译成四元式的步调:A:=B*(-C+D)步调输入串栈PLACE 四元式(1) A:=B*(-C+D)(2) :=B*(-C+D) iA (3) B*(-C+D) i:=A- (4) *(-C+D)i:=i A-B (5) *(-C+D)i:=E A-B (6) *(-C+D)i:=E A-B (7) (-C+D)i:=E* A-B- (8) -C+D)i:=E*( A-B-- (9)C+D) i:=E*(- A-B--- (10) +D) i:=E*(-i A-B---C (11) +D) i:=E*(-E A-B---C (@,C,-, T 1) (12) +D) i:=E*(E A-B--T 1 (13) D) i:=E*(E+ A-B--T 1- (14) ) i:=E*(E+i A-B--T 1-D (15) ) i:=E*(E+E A-B--T 1-D (+,T 1,D,T 2) (16) ) i:=E(E A-B--T 2 (17) i:=E*(E) A-B--T 2- (18) i:=E+E A-B-T 2 (*,B,T 2,T 3) (19) i:=E A-T 3 (:=,T 3,-,A) (20) A产生的四元式: (@,C,-, T 1) (+,T 1,D,T 2) (*,B,T 2,T 3) (:=,T 3,-,A)P218–5/****************设A :10*20,B 、C 、D :20,宽度为w =4 则T1:= i * 20T1:=T1+jT2:=A –84T3:=4*T1Tn:=T2[T3] //这一步是多余的T4:= i + jT5:=B–4T6:=4*T4T7:=T5[T6]T8:= i * 20T8:=T8+jT9:=A–84T10:=4*T8T11:=T9[T10]T12:= i + jT13:=D–4T14:=4*T12T15:= T13[T14]T16:=T11+T15T17:=C–4T18:=4*T16T19:=T17[T18]T20:=T7+T19Tn:=T20******************/P218–6100.(jnz, A, -, 0)101.(j, -, -, 102)102.(jnz, B, -, 104)103.(j, -, -, 0)104.(jnz, C, -, 103)105.(j, -, -, 106)106.(jnz, D, -, 104) --假链链首107.(j, -, -, 100) --真链链首假链:{106,104,103}真链:{107,100}P218–7100.(j<, A, C, 102)101.(j, -, -, 0)102.(j<, B, D, 104)103.(j, -, -, 101)104.(j=, A, ‘1’, 106)105.(j, -, -, 109)106.(+, C, ‘1’, T1)107.(:=, T1, -, C)108.(j, -, -,100)109.(j≤, A, D, 111)110. (j, -, -, 100)111. (+, A, ‘2’, T2)112. (:=, T2, -, A)113. (j, -, -, 109)114. (j, -, - 100)P219–12/********************(1)MAXINT – 5MAXINT – 4MAXINT – 3MAXINT – 2MAXINT – 1MAXINT(2)翻译模式办法1:for E1 := E2 to E3 do S1 do MS F S → {backpatch(S1.nextlist,nextquad);backpatch(F.truelist,M.quad);emit(F.place ‘:=’F.place ‘+’1);emit(‘j ≤,’F.place ‘,’F.end ‘,’M.quad); S.nextlist := F.falselist;}21 to :For E E I F =→{F.falselist:= makelist(nextquad); emit(‘j>,’E1.place ‘,’E2.place ‘,0’);emit(I.Place ‘:=’E1.place);F.truelist := makelist(nextquad);emit(‘j,-,-,-’);F.place := I.place;F.end := E2.place;} id I →{p:=lookup(); if p <> nil thenI.place := pelse error}ε→M {M.quad := nextquad}****************/办法2:S→ for id:=E1 to E2 do S1S→ F S1F→ for id:=E1 to E2 do21:toE E forid F =→do{INITIAL=NEWTEMP;emit(‘:=,’E1.PLACE’,-,’ INITIAL); FINAL=NEWTEMP;emit(‘:=,’E2.PLACE’,-,’ FINAL);p:= nextquad+2;emit(‘j,’ INITIAL ‘,’ FINAL ’,’ p);F.nextlist:=makelist(nextquad);emit(‘j,-,-,-’);F.place:=lookup();if F.place nil thenemit(F.place ‘:=’ INITIAL)F.quad:=nextquad;F.final:=FINAL;}{backpatch(S1.nextlist, nextquad)p:=nextquad+2;emit(‘j,’ F.place‘,’ F.final ’,’ p );S.nextlist := merge(F.nextlist, makelist(nextquad)); emit(‘j,-,-,-’);emit(‘su cc,’ F.place ’,-,’ F.place);emit(‘j,-,-,’ F.quad);}第九章P270–9(1) 传名即当进程调用时,其作用相当于把被调用段的进程体抄到调用出现处,但必须将其中出现的任一形式参数都代之以相应的实在参数.A:=2;B:=3;A:=A+1;A:=A+(A+B);print A;∴A=9(2) 传地址即当程序控制转入被调用段后,被调用段首先把实在参数抄进相应的形式参数的形式单元中,进程体对形参的任何引用或赋值都被处理成对形式单元的直接拜访.当被调用段任务完毕前往时,形式单元(都是指示器)所指的实参单元就持有所希望的值.①A:=2;B:=3;T:=A+B②把T,A,A的地址抄进已知单元J1,J2,J3③x:=J1;y:=J2;z:=J3 //把实参地址抄进形式单元,且J2=J3④Y↑:=y↑+1Z↑:=z↑+x↑ // Y↑:对y的直接拜访Z↑:对z的直接拜访⑤print AA=8(3) 得结果每个形参均对应两个单元,第一个存放实参地址,第二个存放实参值,在进程体中对形参的任何引用或赋值都看成是对它的第二个单元的直接拜访,但在进程任务完毕前往前必须把第二个单元的内容放到第一个单元所指的那个实参单元中①A:=2;B:=3;T:=A+B②把T,A,A的地址抄进已知单元J1,J2,J3③x1:=J1;x2:=T;y1:=J2;y2:=A;z1:=J3;z2:=A; //将实参的地址和值辨别放进两个形式单元中④y2:=y2+1; z2:=z2+x2; //对形参第二个单元的直接拜访⑤x1↑:=x2; y1↑:=y2; z1↑:=z2 //前往前把第二个单元的内容存放到第一个单元所指的实参地址中⑥print AA=7(4) 传值即被调用段开始任务时,首先把实参的值写进相应的形参单元中,然后就仿佛使用局部变量一样使用这些形式单元 A:=2;B:=3;x:=A+By:=Az:=Ay:=y+1z:=z+xprint AA=2进程调用不改动A 的值第十章P306-1P306-2read A,BF:=1C:=A*A 1BD:=B*Bif C<D goto 1L---------------------------E:=A*AF:=F+1E:=E+F2B write Ehalt---------------------------1L : E:=B*BF:=F+2E:=E+F3B write Eif E>100 goto 2L ---------------------------halt4B ---------------------------2L : F:=F-1goto 1L 5B---------------------------根本块为1B 、2B 、3B 、4B 、5B P307-4B2有回路,所以{B2}是循环,B2既是入口节点,又是出口节点(1)代码外提:不存在不变运算,故无代码外提 (2)强度削弱:A:=K*I B:=J*I *→+ (3) 删除根本归结变量:I<100 可以用A<100*K 或B<100*J代替P307-5{B2,B3}(1) (2)。

编译原理第三版课后习题答案解析

编译原理第三版课后习题答案解析

目录P36-62P36-72P36-82P36-92P36-102P36-112P64–72P64–83P64–123 P64–144 P81–15P81–26P81–38P133–18 P133–28 P133–310 P134–511 P164–513 P164–713 P217–114 P217–314 P218–415 P218–515 P218–616 P218–716 P219–1217 P270–918P36-6<1>LG ()1是0~9组成的数字串<2>最左推导: 最右推导:P36-7G<S>P36-8文法: 最左推导: 最右推导:语法树:/******************************** *****************/P36-9句子iiiei 有两个语法树:P36-10/************** ***************/P36-11/*************** L1: L2: L3: L4:***************/第三章习题参考答案P64–7<1>101101(|)*最小化:P64–8<1> <2> <3>P64–12<a>aa,b aaaa b b b最小化:a ab ba b <b>已经确定化了,进行最小化 最小化:aP64–14<1> 01 0 <2>:(|εε0 00 YY给状态编号:最小化: 01 1 1 0 0第四章P81–1<1> 按照T,S 的顺序消除左递归 递归子程序: procedure S; beginif 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;'T end;procedure 'T ; beginif sym=',' then beginadvance;S;'Tendend;其中:sym:是输入串指针IP所指的符号advance:是把IP调至下一个输入符号error:是出错诊察程序<2>FIRST<S>={a,^,<}FIRST<T>={a,^,<}FIRST<'T>={,,ε}FOLLOW<S>={>,,,#}FOLLOW<T>={>}FOLLOW<'T>={>}预测分析表是LL<1>文法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><4>procedure E;beginif sym='<' or sym='a' or sym='b' or sym='^' then begin T; E' endelse errorendprocedure E';beginif sym='+'then begin advance; E endelse if sym<>'>' and sym<>'#' then error endprocedure T;beginif sym='<' or sym='a' or sym='b' or sym='^' then begin F; T' endelse errorendprocedure T';beginif sym='<' or sym='a' or sym='b' or sym='^' then Telse if sym='*' then errorendprocedure F;beginif sym='<' or sym='a' or sym='b' or sym='^' then begin P; F' endelse errorendprocedure F';beginif sym='*'then begin advance; F' endendprocedure P;beginif sym='a' or sym='b' or sym='^'then advanceelse if sym='<' thenbeginadvance; E;if sym='>' then advanceelse errorendelse errorend;P81–3/***************(1)是,满足三个条件。

蒋立源编译原理第三版第三章习题与答案

蒋立源编译原理第三版第三章习题与答案

第 3 章习题3-1 试构造一右线性文法,使得它与如下的文法等价4AB A f UT U faU|a D fbT|b B fcB|c并根据所得的右线性文法,构造出相应的状态转换图。

3-2 对于如题图3-2 所示的状态转换图(1) 写出相应的右线性文法;(2) 指出它接受的最短输入串;(3) 任意列出它接受的另外 4 个输入串;(4) 任意列出它拒绝接受的 4 个输入串。

3-3 对于如下的状态转换矩阵:(1) 分别画出相应的状态转换图;(2) 写出相应的 3 型文法;(3) 用自然语言描述它们所识别的输入串的特征。

3-4 将如下的NFA确定化和最小化:3-5 将如题图3-5所示的具有£动作的NFA确定化。

题图3-5 具有£动作的NFA试用正规式描述它所产生的语言。

3-7 分别构造与如下正规式相应的 NFA(1) ((0 |1)(1 0)) ⑵ b|a(aa *b)*b3-8 构造与正规式(a|b) *(aa|bb)(a|b)*相应的 第3章习题答案3-1 解:根据文法知其产生的语言是L[G]={am 3n c i| m,n,i 仝 1}可以构造与原文法等价的右线性文法其状态转换图如下:3-2 解:4 aA L aA|bB 4 bB|cC|c C^ cC|cDFAA ^ aA|bB4 bB|cC|cC^ cC|cc4 0A|1C0110,0011,000011,00110Df0B|1CEf0B|1CFf 1A|0E|0(2) 最短输入串为 O11(3) 任意接受的四个输入串为:(1) 其对应的右线性文法是 G[A]:0A|1F|1 (4) 任意拒绝接受的输入串为: 0111,1011,1100,10013-3 解:(1) 相应的状态转换图为:(2) 相应的 3 型文法为: (i ) S f aA|bS AfaA|bB| b Bf aB|bB|a|b(ii) S f aA|bB| AfbA|aC| a|b BfaB|bC| b Cf aC|bC|a|b(iii) S f aA|bB| AfaB|bA| a BfaB|bB|a|b (iv) S f bS|aAAfaC|bB| aBfaB|bC| bCf aC|bC|a|b(3) 用自然语言描述的输入串的特征为:(i )以任意个(包括0个)b 开头,中间有任意个(大于1) a ,跟一个b ,还可以有一个由 a,b 组成的任意字符串。

程序设计语言编译原理第三版答案

程序设计语言编译原理第三版答案

程序设计语言编译原理第三版答案【篇一:西北工业大学版(蒋立源第三版)编译原理课后习题答案】解:源程序是指以某种程序设计语言所编写的程序。

目标程序是指编译程序(或解释程序)将源程序处理加工而得的另一种语言(目标语言)的程序。

翻译程序是将某种语言翻译成另一种语言的程序的统称。

编译程序与解释程序均为翻译程序,但二者工作方法不同。

解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而是每读入一条高级语言程序语句,就用解释程序将其翻译成一段机器指令并执行之,然后再读入下一条语句继续进行解释、执行,如此反复。

即边解释边执行,翻译所得的指令序列并不保存。

编译程序的特点是先将高级语言程序翻译成机器语言程序,将其保存到指定的空间中,在用户需要时再执行之。

即先翻译、后执行。

2解:一般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。

3解:c语言的关键字有:auto break case char constcontinue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while。

上述关键字在c语言中均为保留字。

4解:c语言中括号有三种:{},[],()。

其中,{}用于语句括号;[]用于数组;()用于函数(定义与调用)及表达式运算(改变运算顺序)。

c语言中无end关键字。

逗号在c语言中被视为分隔符和运算符,作为优先级最低的运算符,运算结果为逗号表达式最右侧子表达式的值(如:(a,b,c,d)的值为d)。

5略第二章习题解答1.(1)答:26*26=676(2)答:26*10=260(3)答:{a,b,c,...,z,a0,a1,...,a9,aa,...,az,...,zz,a00,a01,...,zzz},共26+26*36+26*36*36=34658个2.构造产生下列语言的文法(1){anbn|n≥0}(2){anbmcp|n,m,p≥0}(3){an # bn|n≥0}∪{cn # dn|n≥0}解:对应文法为g(s) = ({s,x,y},{a,b,c,d,#}, {s→x,s→y,x→axb|#,y→cyd|# },s)(4){w#wr# | w?{0,1}*,wr是w的逆序排列}解:g(s) = ({s,w,r},{0,1,#}, {s→w#, w→0w0|1w1|# },s)(5)任何不是以0打头的所有奇整数所组成的集合(6)所有偶数个0和偶数个1所组成的符号串集合解:对应文法为s→0a|1b|e,a→0s|1c b→0c|1s c→1a|0b3.描述语言特点(1)s→10s0s→aaa→baa→a解:本文法构成的语言集为:l(g)={(10)nabma0n|n, m≥0}。

编译原理 第3章习题解答

编译原理 第3章习题解答

第三章习题参考解答3.1 构造自动机A,使得①②③当从左至右读入二进制数时,它能识别出读入的奇数;④它识别字母表{a, b}上的符号串,但符号串不能含两个相邻的a,也不含两个相邻的b;⑤它能接受字母表{0, 1}上的符号串,这些符号串由任意的1、0和随后的任意的11、00对组成。

⑥它能识别形式如±dd*⋅ d*E ±dd的实数,其中,d∈{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}。

3.2 构造下列正规表达式的DFSA:① xy*∣yx*y∣xyx;② 00∣(01)*∣11;③ 01((10∣01)*(11∣00))*01;④ a(ab*∣ba*)*b。

3.3 消除图3.24所示自动机的空移。

图3.24 含空移的自动机3.4 将图3.25所示NDFSA确定化和最小化。

图3.25 待确定化的NDFSA3.5 设e、e1、e2是字母表∑上的正规表达式,试证明① e∣e=e;② {{e}}={e};③ {e}=ε∣e{e};④ {e1 e2} e1= e1{e2 e1};⑤ {e1∣e2}={{e1}{e2}}={{e1}∣{e2}}。

3.6 构造下面文法G[Z]的自动机,指明该自动机是不是确定的,并写出它相应的语言: G[Z]:Z→A0A→A0∣Z1∣03.7 设NDFSA M=({x, y},{a, b},f, x, {y}), 其中,f(x, a)={x, y}, f(x, b)={y}, f(y, a)=∅, f(y, b)={x, y}。

试对此NDFSA 确定化。

3.8 设文法G[〈单词〉]:〈单词〉→〈标识符〉∣〈无符号整数〉 〈标识符〉→〈字母〉∣〈标识符〉〈字母〉∣〈标识符〉〈数字〉 〈无符号整数〉→〈数字〉∣〈无符号整数〉〈数字〉 〈字母〉→a ∣b 〈数字〉→1∣2试写出相应的有限自动机和状态图。

3.9 图3.29所示的是一个NDFSA A ,试构造一个正规文法G ,使得L(G)= L(A)。

编译原理第3章 习题解答

编译原理第3章 习题解答

第3章习题解答1.构造正规式1(0|1)*101相应的DFA.[答案]先构造NFA确定化0 1X AA A ABAB AC ABAC A ABYABY AC AB重新命名,令AB为B、AC为C、ABY为D0 1X AA A BB C BC A DD C B转化成DFA:============================================================== 2.将下图确定化:[答案]0 1S VQ QUVQ VZ QUQU V QUZVZ Z ZV ZQUZ VZ QUZZ Z Z重新命名,令VQ为A、QU为B、VZ为C、V为D、QUZ为E、Z为F。

0 1S A BA C BB D EC F FD FE C EF F F转化为DFA:================================================================ 3.把下图最小化:[答案](1)初始分划得Π0:终态组{0},非终态组{1,2,3,4,5}对非终态组进行审查:{1,2,3,4,5}a {0,1,3,5}而{0,1,3,5}既不属于{0},也不属于{1,2,3,4,5} ∵{4} a {0},所以得新分划 (2)Π1:{0},{4},{1,2,3,5} 对{1,2,3,5}进行审查: ∵{1,5} b {4}{2,3} b {1,2,3,5},故得新分划 (3)Π2:{0},{4},{1, 5},{2,3} {1, 5} a {1, 5}{2,3} a {1,3},故状态2和状态3不等价,得新分划 (3)Π3:{0},{2},{3},{4},{1, 5} 这是最后分划了 (4)最小DFA :======================================= 4.构造一个DFA ,它接收Σ={0,1}上所有满足如下条件的字符串:每个1都有0直接跟在右边。

编译原理(第三版)第3章课后练习及参考答案中石大版

编译原理(第三版)第3章课后练习及参考答案中石大版

第3章练习P47作业布置:P47 4 ,9,11,14(1)4、已知文法G[Z]:(1)Z::=aZb (2)Z::=ab写出L(G[Z])的全部元素解:L(G[Z])={a n b n,n>=1}9、考虑下面的上下文无关文法:S→SS* | SS+ | a(1)表明通过此文法如何生成串aa+a*,并为该串构造语法树(2)该文法生成的语言是什么?解:(1)推导过程见语法树。

语法树如下(2)该文法生成的语言为用递归逆波兰式表示的运算式。

逆波兰式是将运算对象写在前面,把运算符写在后面。

11、G[E]:E→T|E+T|E-TT→F|T*F|T/FF → (E)|i证明E+T*F 是它的一个句型,指出这个句型的所有短语、直接短语和句柄。

解:可为E+T*F 构造一棵语法树(见下图),所以它是句型。

从语法树中容易看出,E+T*F 的短语有:T*F 是句型E+T*F 的相对于T 的短语,也是相对于规则T →T*F 的直接短语。

E+T*F 是句型E+T*F 的相对于E 的短语。

句型E+T*F 的句柄(最左直接短语)是T*F 。

14、给出生成下述语言的上下文无关文法:(1){a n b n a m b m |n,m>=0}(2){1n 0m 1m 0n |n,m>=0}(3){WaW r |W 属于{0|a}*,W r 表示W 的逆}解:(1)所求文法为G[S]=({S,A},{a,b},P,S),其中P 为:S →AA A →aAb|ε (2)所求文法为G[S]=({S,A},{0,1},P,S),其中P 为: S →1S0|AA →0A1|ε(3)W 属于{0|a}*是指W 可以的取值为{ε,0,a,00,a0,aa0,00aa,a0a0,…}E E + T T * F如果W=aa0a00,则W r=00a0aa。

所求文法为G[S]=({S,P,Q},{0,a},P,S),其中P为:S 0S0|aSa|a。

蒋立源编译原理西北工业大学出版社第3版课后答案免费

蒋立源编译原理西北工业大学出版社第3版课后答案免费

《编译原理》课后习题答案第一章1.解:源程序是指以某种程序设计语言所编写的程序。

目标程序是指编译程序(或解释程序)将源程序处理加工而得的另一种语言(目标语言)的程序。

翻译程序是将某种语言翻译成另一种语言的程序的统称。

编译程序与解释程序均为翻译程序,但二者工作方法不同。

解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而是每读入一条高级语言程序语句,就用解释程序将其翻译成一段机器指令并执行之,然后再读入下一条语句继续进行解释、执行,如此反复。

即边解释边执行,翻译所得的指令序列并不保存。

编译程序的特点是先将高级语言程序翻译成机器语言程序,将其保存到指定的空间中,在用户需要时再执行之。

即先翻译、后执行。

2.解:一般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。

3.解:C语言的关键字有:auto break case char const continuedefault do double else enum extern float for goto if int longregister return short signed sizeof static struct switch typedef union unsigned void volatile while。

上述关键字在C语言中均为保留字。

4.解:C语言中括号有三种:{},[],()。

其中,{}用于语句括号;[]用于数组;()用于函数(定义与调用)及表达式运算(改变运算顺序)。

C语言中无END关键字。

逗号在C语言中被视为分隔符和运算符,作为优先级最低的运算符,运算结果为逗号表达式最右侧子表达式的值(如:(a,b,c,d)的值为d)。

5.略第二章1.(1)答:26*26=676(2)答:26*10=260(3)答:{a,b,c,...,z,a0,a1,...,a9,aa,...,az,...,zz,a00,a01,...,zzz},共26+26*36+26*36*36=34658个2.构造产生下列语言的文法(1){anbn|n≥0}解:对应文法为G(S) = ({S},{a,b},{ S→ε| aSb },S)(2){anbmcp|n,m,p≥0}解:对应文法为G(S) = ({S,X,Y},{a,b,c},{S→aS|X,X→bX|Y,Y→cY|ε},S)(3){an # bn|n≥0}∪{cn # dn|n≥0}解:对应文法为G(S) = ({S,X,Y},{a,b,c,d,#}, {S→X, S→Y,X→aXb|#,Y →cYd|# },S)(4){w#wr# | w?{0,1}*,wr是w的逆序排列}解:G(S) = ({S,W,R},{0,1,#}, {S→W#, W→0W0|1W1|# },S)(5)任何不是以0打头的所有奇整数所组成的集合解:G(S) = ({S,A,B,I,J},{-,0,1,2,3,4,5,6,7,8,9},{S→J|IBJ,B→0B|IB|e, I→J|2|4|6|8, Jà1|3|5|7|9},S)(6)所有偶数个0和偶数个1所组成的符号串集合解:对应文法为 S→0A|1B|e,A→0S|1C B→0C|1S C→1A|0B3.描述语言特点(1)S→10S0S→aAA→bAA→a解:本文法构成的语言集为:L(G)={(10)nabma0n|n, m≥0}。

编译原理教程课后习题答案——第三章

编译原理教程课后习题答案——第三章

第三章语法分析3.1 完成下列选择题:(1) 文法G:S→xSx|y所识别的语言是。

a. xyxb. (xyx)*c. xnyxn(n≥0)d. x*yx*(2) 如果文法G是无二义的,则它的任何句子α。

 a. 最左推导和最右推导对应的语法树必定相同b. 最左推导和最右推导对应的语法树可能不同c. 最左推导和最右推导必定相同d. 可能存在两个不同的最左推导,但它们对应的语法树相同(3) 采用自上而下分析,必须。

a. 消除左递 a. 必有ac归b. 消除右递归c. 消除回溯d. 提取公共左因子(4) 设a、b、c是文法的终结符,且满足优先关系ab和bc,则。

b. 必有cac. 必有bad. a~c都不一定成立(5) 在规范归约中,用来刻画可归约串。

a. 直接短语b. 句柄c. 最左素短语d. 素短语(6) 若a为终结符,则A→α·aβ为项目。

a. 归约b. 移进c. 接受d. 待约(7) 若项目集Ik含有A→α· ,则在状态k时,仅当面临的输入符号a∈FOLLOW(A)时,才采取“A→α· ”动作的一定是。

a. LALR文法b. LR(0)文法c. LR(1)文法d. SLR(1)文法(8) 同心集合并有可能产生新的冲突。

a. 归约b. “移进”/“移进”c.“移进”/“归约”d. “归约”/“归约”【解答】(1) c (2) a (3) c (4) d (5) b (6) b (7) d (8) d3.2 令文法G[N]为G[N]: N→D|NDD→0|1|2|3|4|5|6|7|8|9(1) G[N]的语言L(G[N])是什么?(2) 给出句子0127、34和568的最左推导和最右推导。

【解答】(1) G[N]的语言L(G[N])是非负整数。

(2) 最左推导:NNDNDDNDDDDDDD0DDD01DD012D0127NNDDD3D34NNDNDDDDD5DD56D568最右推导:NNDN7ND7N27ND27N127D1270127NNDN4D434NNDN8ND8N68D685683.3 已知文法G[S]为S→aSb|Sb|b,试证明文法G[S]为二义文法。

编译原理课后答案(第三版蒋立源康慕宁编)

编译原理课后答案(第三版蒋立源康慕宁编)

编译原理课后答案(第三版蒋立源康慕宁编)第一章习题解答1解:源程序是指以某种程序设计语言所编写的程序。

目标程序是指编译程序(或解释程序)将源程序处理加工而得的另一种语言(目标语言)的程序。

翻译程序是将某种语言翻译成另一种语言的程序的统称。

编译程序与解释程序均为翻译程序,但二者工作方法不同。

解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而是每读入一条高级语言程序语句,就用解释程序将其翻译成一段机器指令并执行之,然后再读入下一条语句继续进行解释、执行,如此反复。

即边解释边执行,翻译所得的指令序列并不保存.编译程序的特点是先将高级语言程序翻译成机器语言程序,将其保存到指定的空间中,在用户需要时再执行之.即先翻译、后执行。

2解:一般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。

3解:C语言的关键字有:auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while。

上述关键字在C语言中均为保留字。

4解:C语言中括号有三种:{},[],()。

其中,{}用于语句括号;[]用于数组;()用于函数(定义与调用)及表达式运算(改变运算顺序)。

C语言中无END关键字。

逗号在C语言中被视为分隔符和运算符,作为优先级最低的运算符,运算结果为逗号表达式最右侧子表达式的值(如:(a,b,c,d)的值为d)。

5略第二章习题解答1。

(1)答:26*26=676(2)答:26*10=260(3)答:{a,b,c,。

编译原理练习答案蒋宗礼第三章

编译原理练习答案蒋宗礼第三章

一个非确定有限自动机(NFA)M 是一个五元式:M=(Q, ∑ ,f,s0,Z) 。 在确定有限自动机的描述中,(1) 、 (2) 、(5)同确定有限自动机,而(3)为:f 是一个 * 以 Q× ∑ 到 Q 的子集的映射,即 f:S×∑*→2Q。 。 显然,一个含有 m 个状态和 n 个输入字符的非确定有限自动机可表示成一张状态图, 该图含有 m 个状态结点,每个结可射出若干条有向弧与别的结点相连接,每条弧用∑*中的 一个字(不一定要不同的字且可以是空字ε )作标记(称为输入字) ,整个图至少含有一个 初态结点以及若干个 (可以是 0 个) 终态结点, 某些结既可以是初态结点又可以是终态结点。 注意:DFA 是 NFA 的特例。对于每个非确定有限自动机 M,存在着一个确定有限自动机 M`,使得 L(M)=L(M`) ,即两个有限自动机等价。
任何地方出现,所以本题只需要考虑一种情况,另外一种情况也可以类似求得。考虑包含奇 数个 0 的字符串:由于只关心 0 的个数的奇偶数,我们可以把二进制串分成多段来考虑,第 1 段为二进制串的开始到第 1 个 0 为止, 这一段包含 1 个 0, 并且 0 的前面有 0 个或多个 1, 对于剩下的二进制串按照每段包含两个 0 的方式去划分,即以 0 开始,以 0 结尾,中间可以 有 0 个或多个 1,如果一个二进制串被这样划分完后,剩下的部分如果全部是全 1 串(这些 全 1 串在前面划分的串之间或最后) ,则该二进制串就具有奇数个 0,所以该二进制可以这 * * * 样描述:以第 1 段(1 ) )开始,后面由全 1 串(1 )以及包含两个 0 的串(01 0)组成, * * * * * 所以包含奇数个 0 的正规表达式为:1 0(1|01 0) ,本题的解答则是:1 0(1|01 0) * * * * |0 1(0|10 1) 。 例 8 语言 L 是所有由偶数个 0 和偶数个 1 组成的句子的集合,给出定义 L 的正规文法。 【解】解题思路: 这道题可以从状态转换图着手,由于每读入 1 个“0” , “0”的个数的奇偶数就会变,每 读入 1 个“1” , “1”的个的奇偶数也会改变,因此本题可以引入 4 个状态,分别代表偶数个 “0”和“1” 、奇数个“0”和“1” 、奇数个“1”偶数个“0”和奇数个“0”偶数个“1” , 那么,能接受语言 L 的状态转换图如下图 3 所示。

编译原理第三版课后习题答案

编译原理第三版课后习题答案

目录P36-6 .................................................. 错误!未定义书签。

P36-7 .................................................. 错误!未定义书签。

P36-8 .................................................. 错误!未定义书签。

P36-9 .................................................. 错误!未定义书签。

P36-10 ................................................. 错误!未定义书签。

P36-11 ................................................. 错误!未定义书签。

P64–7 ................................................. 错误!未定义书签。

P64–8 ................................................. 错误!未定义书签。

P64–12 ................................................ 错误!未定义书签。

P64–14 ................................................ 错误!未定义书签。

P81–1 ................................................. 错误!未定义书签。

P81–2 ................................................. 错误!未定义书签。

P81–3 ................................................. 错误!未定义书签。

编译原理教程课后习题答案——第三章

编译原理教程课后习题答案——第三章

第三章语法分析3.1 完成下列选择题:(1) 文法G:S→xSx|y所识别的语言是。

a. xyxb. (xyx)*c. xnyxn(n≥0)d. x*yx*(2) 如果文法G是无二义的,则它的任何句子α。

 a. 最左推导和最右推导对应的语法树必定相同b. 最左推导和最右推导对应的语法树可能不同c. 最左推导和最右推导必定相同d. 可能存在两个不同的最左推导,但它们对应的语法树相同(3) 采用自上而下分析,必须。

a. 消除左递 a. 必有ac归b. 消除右递归c. 消除回溯d. 提取公共左因子(4) 设a、b、c是文法的终结符,且满足优先关系ab和bc,则。

b. 必有cac. 必有bad. a~c都不一定成立(5) 在规范归约中,用来刻画可归约串。

a. 直接短语b. 句柄c. 最左素短语d. 素短语(6) 若a为终结符,则A→α·aβ为项目。

a. 归约b. 移进c. 接受d. 待约(7) 若项目集Ik含有A→α· ,则在状态k时,仅当面临的输入符号a∈FOLLOW(A)时,才采取“A→α· ”动作的一定是。

a. LALR文法b. LR(0)文法c. LR(1)文法d. SLR(1)文法(8) 同心集合并有可能产生新的冲突。

a. 归约b. “移进”/“移进”c.“移进”/“归约”d. “归约”/“归约”【解答】(1) c (2) a (3) c (4) d (5) b (6) b (7) d (8) d3.2 令文法G[N]为G[N]: N→D|NDD→0|1|2|3|4|5|6|7|8|9(1) G[N]的语言L(G[N])是什么?(2) 给出句子0127、34和568的最左推导和最右推导。

【解答】(1) G[N]的语言L(G[N])是非负整数。

(2) 最左推导:NNDNDDNDDDDDDD0DDD01DD012D0127NNDDD3D34NNDNDDDDD5DD56D568最右推导:NNDN7ND7N27ND27N127D1270127NNDN4D434NNDN8ND8N68D685683.3 已知文法G[S]为S→aSb|Sb|b,试证明文法G[S]为二义文法。

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

第3章习题3-1 试构造一右线性文法,使得它与如下的文法等价S→AB A→UT U→aU|a D→bT|b B→cB|c 并根据所得的右线性文法,构造出相应的状态转换图。

3-2 对于如题图3-2所示的状态转换图(1) 写出相应的右线性文法;(2) 指出它接受的最短输入串;(3) 任意列出它接受的另外4个输入串;(4) 任意列出它拒绝接受的4个输入串。

3-3 对于如下的状态转换矩阵:(1) 分别画出相应的状态转换图;(2) 写出相应的3型文法;(3) 用自然语言描述它们所识别的输入串的特征。

3-4 将如下的NFA确定化和最小化:3-5 将如题图3-5所示的具有ε动作的NFA确定化。

题图3-5 具有ε动作的NFA3-6 设有文法G[S]:S→aA A→aA|bB B→bB|cC|c C→cC|c 试用正规式描述它所产生的语言。

3-7 分别构造与如下正规式相应的NFA。

(1) ((0* |1)(1* 0))*(2) b|a(aa*b)*b3-8 构造与正规式(a|b)*(aa|bb)(a|b)*相应的DFA。

第3章习题答案3-1 解:根据文法知其产生的语言是:L[G]={a m b n c i| m,n,i≧1}可以构造与原文法等价的右线性文法:S→aA A→aA|bB B→bB|cC|c C→cC|c 其状态转换图如下:3-2 解:(1) 其对应的右线性文法是G[A]:A →0D B→0A|1C C→0A|1F|1D→0B|1C E→0B|1C F→1A|0E|0(2) 最短输入串为011(3) 任意接受的四个输入串为:0110,0011,000011,00110(4) 任意拒绝接受的输入串为:0111,1011,1100,10013-3 解:(1) 相应的状态转换图为:(2) 相应的3型文法为:(ⅰ) S→aA|bS A→aA|bB|b B→aB|bB|a|b(ⅱ) S→aA|bB|a A→bA|aC|a|b B→aB|bC|b C→aC|bC|a|b(ⅲ) S→aA|bB|b A→aB|bA|a B→aB|bB|a|b(ⅳ) S→bS|aA A→aC|bB|a B→aB|bC|b C→aC|bC|a|b(3) 用自然语言描述的输入串的特征为:(ⅰ) 以任意个(包括0个)b开头,中间有任意个(大于1)a,跟一个b,还可以有一个由a,b组成的任意字符串。

(ⅱ) 以a打头,中间有任意个(包括0个)b,再跟a,最后由一个a,b所组成的任意串结尾;或者以b打头,中间有任意个(包括0个)a,再跟b,最后由一个a,b所组成的任意串结尾。

(ⅲ) 以a打头,后跟任意个(包括0个)b ,再跟a,最后由一个a,b所组成的任意串结尾;或者以b打头,由一个a,b所组成的任意串结尾。

(ⅳ) 以任意个(包括0个)b开头,中间跟aa,最后由一个a,b所组成的任意串结尾;或者以任意个(包括0个)b开头,中间跟ab后,再接任意个(包括0个)a,再接b,最后由一个a,b所组成的任意串结尾。

3-4 解:(1) 将NFA M确定化后得DFA M′,其状态转换矩阵如答案图3-4-(1)之(a)所示,给各状态重新命名,即令:[S]=1, [S,A]=2, [A,B]=3, [B]=4且由于3及4的组成中均含有M的终态B,故3和4组成了DFA M′的终态集Z′。

于是,所构造之DFA M′的状态转换矩阵和状态转换图如答案图3-4-(1)之(b)及(c)所示。

现将DFA M′最小化:(ⅰ)初始分划由两个子集组成,即π0:{1,2}, {3,4}(ⅱ)为得到下一分划,考察子集{1,2}。

因为{2}b ={3}{3,4}但 {1}b =故1和2可区分,于是便得到下一分划π1: {1}, {2}, {3,4}(ⅲ)又因π1≠π0 ,再考虑{3,4},因为{3}b ={3}{3,4}而 {4}b =故3和4可区分,从而又得到π2: {1}, {2}, {3}, {4}此时子集已全部分裂,故最小化的过程宣告结束,M′即为状态数最小的DFA。

(2) 将NFA M确定化后得DFA M′,其状态转换矩阵如答案图3-4-(2)之(a)所示,给各状态重新命名,即令:[S]=1, [A]=2, [B,C]=3且由于3的组成中含有M的终态C,故3为DFA M′的终态。

于是,所构造之DFA M′的状态转换矩阵和状态转换图如答案图3-4-(2)之(b)及(c)所示。

现将DFA M′最小化:(ⅰ)初始分划由两个子集组成,即π0:{1,2}, {3}(ⅱ)为得到下一分划,考察子集{1,2}。

因为{2}b ={2}{1,2}但 {1}b =故1和2可区分,于是便得到下一分划π1: {1}, {2}, {3}此时子集已全部分裂,故最小化的过程宣告结束,M′即为状态数最小的DFA。

(3) 将NFA M确定化后得DFA M′,其状态转换矩阵如答案图3-4-(3)之(a)所示,给各状态重新命名,即令:[S]=1, [A]=2, [S,B]=3且由于3的组成中含有M的终态B,故3为DFA M′的终态。

于是,所构造之DFA M′的状态转换矩阵和状态转换图如答案图3-4-(3)之(b)及(c)所示。

现将DFA M′最小化:(ⅰ)初始分划由两个子集组成,即π0:{1,2}, {3}(ⅱ)为得到下一分划,考察子集{1,2}。

因为{2}b ={3}但 {1}b =故1和2可区分,于是便得到下一分划π1: {1}, {2}, {3}此时子集已全部分裂,故最小化的过程宣告结束,M′即为状态数最小的DFA。

(4) 将NFA M确定化后得DFA M′,其状态转换矩阵如答案图3-4-(4)之(a)所示,给各状态重新命名,即令:[A]=1, [B,C]=2, [B]=3, [C]=4且由于2和4的组成中含有M的终态C,故2和4组成了DFA M′的终态集Z′。

于是,所构造之DFA M′的状态转换矩阵和状态转换图如答案图3-4-(4)之(b)及(c)所示。

现将DFA M′最小化:(ⅰ)初始分划由两个子集组成,即π0:{1,3}, {2,4}(ⅱ)为得到下一分划,考察子集{1,3}。

因为{1}a ={2}{2,4}但 {3}a ={1}{1,3}故1和3可区分,于是便得到下一分划π1: {1}, {3}, {2,4}(ⅲ)又因π1≠π0,再考虑{2,4},因为{2}a ={4}a ={1}, {2}b ={4}b ={4}所以2和4不可区分,故子集{S,B}已不能再分裂。

此时π2 =π1 ,子集分裂的过程宣告结束。

(ⅳ) 现选择状态2作为{2,4}的代表,将状态4从状态转换图中删去,并将原来引至4的矢线都引至2,这样,我们就得到了最小化后的DFA M〞如答案图3-4-(4)之(d)所示。

3-5 解:(1) 将具有ε动作的NFA M确定化后得DFA M′,其状态转换矩阵如答案图3-5-(1)之(a)所示,给各状态重新命名,即令:[S,B,C]=1, [A]=2, [B,C] =3, [C]=4且由于1,3和4的组成中均含有M的终态C,故1,3和4组成了DFA M′的终态集Z′。

于是,所构造之DFA M′的状态转换矩阵和状态转换图如答案图3-5-(1)之(b)及(c)所示。

(2) 将具有ε动作的NFA M确定化后得DFA M′,其状态转换矩阵如答案图3-5-(2)之(a)所示,给各状态重新命名,即令:[S]=1, [Z]=2, [R,U] =3, [S,X]=4,[R,U,Y]=5, [S,U,X]=6, [S,Z]=7, [R,U,Y,Z]=8且由于2,7和8的组成中均含有M的终态Z,故2,7和8组成了DFA M′的终态集Z′。

于是,所构造之DFA M′的状态转换矩阵和状态转换图如答案图3-5-(2)之(b)及(c)所示。

3-6 解:首先将文法写成方程组:S=aA (1)A=aA+bB (2)B=bB+cC+c (3)C=cC+c (4)将(4)代入(3),得:B=bB+C (5)由论断,方程(4)的解为:C=c*c将上式代入(5),得:B=bB+c*c由论断,得:B=b*c*c将上式代入(2),得:A=aA+b*bc*c由论断,得:A=a*b*bc*c将上式代入(1),得:S=a*ab*bc*c即文法所产生的语言可用正规式a*ab*bc*c表示。

3-7 解:(1) 构造与正规式((0* |1)(1* 0))*相应的NFA的步骤如答案图3-7-(1)所示:(2) 构造与正规式 b|a(aa*b)*b 相应的NFA的步骤如答案图3-7-(2)所示:答案图3-7-(2) 正规式 b|a(aa*b)*b 的NFA3-8 解:首先,构造与正规式(a|b)*(aa|bb)(a|b)*相应的NFA M,其构造步骤如答案图3-8(a)所示:其次,将答案图3-8(a)所示的具有ε动作的NFA M确定化后得到DFA M′,其状态转换矩阵如答案图3-8(b)所示,给各状态重新命名,即令:[S,3,1]=S, [3,1,5]=A, [3,1,6] =B, [3,1,5,2,4,Z]=C,[3,1,6,2,4,Z]=D, [3,1,6,4,Z]=E, [3,1,5,4,Z]=F且由于C,D,E和F的组成中均含有NFA M的终态Z,故C,D,E和F组成了DFA M′的终态集Z′。

于是,将NFA M确定化后所得DFA M′的状态转换矩阵和状态转换图如答案图3-8(c)及(d)所示。

(e) 对DFA M′最小化后所得的DFA M〞的状态转换图答案图3-8最后,将所得DFA M′最小化:(ⅰ)初始分划由两个子集组成,即π0:{S,A,B}, {C,D,E,F}(ⅱ)为得到下一分划,考察子集{S,A,B}。

因为{S,B}a ={A}{S,A,B}但 {A}a ={C}{C,D,E,F}故S,B和A可区分,于是便得到下一分划π1: {S,B}, {A}, {C,D,E,F}(ⅲ)因π1 ≠π0 ,考虑{S,B},因为{S}b ={B}{S,B}但 {B}b ={D}{C,D,E,F}故S和B可区分,于是便得到下一分划π2: {S}, {B}, {A}, {C,D,E,F}(ⅳ) 又因π2 ≠π1 ,再考虑{C,D,E,F},因为{C}a ={F}a ={C}, {C}b ={F}b ={E}所以C和F等价;同理可得D和E等价。

又因为{C}a ={C}, {D}a ={F},{C}b ={E}, {D}b ={D}而C和F等价,D和E等价,所以C和D也等价,故C,D,E,F这4个状态等价。

此时π3 =π2 ,子集分裂的过程宣告结束。

(ⅴ)现选择状态C作为{C,D,E,F}的代表,将状态D,E,F从状态转换图中删去,并将原来引至D,E,F的矢线都引至C,这样,我们就得到了最小化后的DFA M〞如答案图3-8(e)所示,此DFA M〞即为所求的与正规式(a|b)*(aa|bb)(a|b)*相应的DFA。

相关文档
最新文档