蒋立源编译原理 第三版 第三章 习题与答案(修改后)
编译原理第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章文法和语言第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[〈表达式〉]是二义的。
编译原理第三版课后习题解答

第二章习题解答P36-6(1)L(G i)是o~9组成的数字串(2) 最左推导:N ND NDD NDDD DDDD 0DDD 01DD 012D 0127 N ND DD 3D 34N ND NDD DDD 5DD 56D 568最右推导:N ND N7 ND7 N27 ND27 N127 D127 0127N ND N4 D4 34N ND N8 ND8 N68 D68 568P36-7G(S)O 1|3|5|7|9N 2|4|6|8|OD 0|NS O|AOA AD|NP36-8文法:E T|E T|E TT F|T*F|T / FF (E)|i最左推导:E E T T TF Ti T i T* F i F* F i i* F i i*i ET T*F F*F i*F i*( E) i*( E T) i*( T T) i*( F T) i*( i T) i *( i F) i *( i i )最右推导EE TE T*F E T*i E F*i E i*i T i * i F i*i i i* ET F*T F*F F*( E) F *( E T) F *( E F) F*( E i)F *( T i) F*( F i) F *(i i) i *( i i)/********************************P36-9句子iiiei 有两个语法树:S iSeS iSei iiSei iiieiS iS iiSeS iiSei iiieiP36-10/**************S TS |TT (S)|()***************/P36-11/***************L1:S ACA aAb | ab C cC |L2:S ABA aA|B bBc|bcL3:E ETii+i+i i-i-i ii+i*i*************** **/第三章习题参考答案P64 - 7确定化:1 {X}{1,2,3}{1,2,3} {2,3} {2,3,4} {2,3} {2,3} {2,3,4} {2,3,4} {2,3,5} {2,3,4} {2,3,5} {2,3} {2,3,4,Y} {2,3,4,Y}{2,3,5}{2,3,4,}最小化:S AB A aAb| B aBb| L4: S A| B A 0A1| B 1B0| A ***************I1(01)*1017n1 1{0,1,2,3,4耳,{6}{0,123,4,5}。
编译原理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)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍答案:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。
(2)源程序:源语言编写的程序称为源程序。
(3)目标程序:目标语言书写的程序称为目标程序。
(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。
通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。
(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。
(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。
第 2 题一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。
答案:一个典型的编译程序通常包含 8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。
其各部分的主要功能简述如下。
词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。
语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。
语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。
中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。
中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。
盛威网()专业的计算机学习网站1《编译原理》课后习题答案第一章目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。
编译原理第三版课后习题答案

编译原理第三版课后习题答案编译原理是计算机科学中的一门重要课程,它研究的是如何将高级程序语言转换为机器语言的过程。
而《编译原理》第三版是目前被广泛采用的教材之一。
在学习过程中,课后习题是巩固知识、提高能力的重要环节。
本文将为读者提供《编译原理》第三版课后习题的答案,希望能够帮助读者更好地理解和掌握这门课程。
第一章:引论习题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:什么是中间代码?答案:中间代码是一种介于源代码和目标代码之间的表示形式,它将源代码转换为一种更容易进行优化和转换的形式。
(完整版)编译原理课后答案(第三版蒋立源康慕宁编)

编译原理课后答案(第三版蒋立源康慕宁编)第一章习题解答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,...,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}。
编译原理第三章练习题答案

编译原理第三章练习题答案编译原理第三章练习题答案编译原理是计算机科学中的重要学科,它研究的是如何将高级语言代码转化为机器语言的过程。
在编译原理的学习过程中,练习题是不可或缺的一部分,通过完成练习题可以更好地理解和掌握编译原理的知识。
本文将为大家提供编译原理第三章练习题的答案,希望对大家的学习有所帮助。
1. 什么是语法分析?语法分析是编译器中的一个重要模块,它的主要任务是根据给定的语法规则,对输入的源代码进行分析和解释。
语法分析器会根据语法规则构建一个语法树,用于表示源代码的结构和含义。
常用的语法分析方法有递归下降法、LL(1)分析法和LR分析法等。
2. 什么是LL(1)文法?LL(1)文法是一种特殊的上下文无关文法,它具有以下两个特点:(1) 对于任何一个句子,最左推导和最右推导是唯一的。
(2) 在预测分析过程中,只需要向前看一个输入符号就可以确定所采用的产生式。
LL(1)文法是一种常用的文法形式,它适用于递归下降法和LL(1)分析法。
3. 什么是FIRST集合和FOLLOW集合?FIRST集合是指对于一个文法符号,它能够推导出的终结符号的集合。
FOLLOW 集合是指在一个句型中,某个非终结符号的后继终结符号的集合。
计算FIRST集合和FOLLOW集合可以帮助我们进行语法分析,特别是LL(1)分析。
4. 什么是递归下降语法分析法?递归下降语法分析法是一种基于产生式的自顶向下的语法分析方法。
它的基本思想是从文法的开始符号开始,递归地根据产生式进行分析,直到推导出输入符号串或发现错误。
递归下降语法分析法的实现比较简单,但对于某些文法可能会出现回溯现象,影响分析效率。
5. 什么是LR分析法?LR分析法是一种自底向上的语法分析方法,它的基本思想是从输入符号串开始,逐步构建语法树,直到推导出文法的开始符号。
LR分析法具有较好的分析效率和广泛的适用性,常用的LR分析方法有LR(0)、SLR(1)、LR(1)和LALR(1)等。
蒋立源编译原理第三版第三章习题与答案(修改后)

3-1 试构造一右线性文法,使得它与如下的文法等价 S→AB A → UT U → aU|a D →bT|b B → cB|c
并根据所得的右线性文法,构造出相应的状态转换图。
3-2 对于如题图 3-2 所示的状态转换图 0
0 0 A
D
1
0 1
B
C1
F
0
1
0
E
1 题图 3-2
(1) 写出相应的右线性文法; (2) 指出它接受的最短输入串; (3) 任意列出它接受的另外 4 个输入串; (4) 任意列出它拒绝接受的 4 个输入串。
但
{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 为 DFAM′的终态。于是,所构造之 DFAM′的 状态转换矩阵和状态转换图如答案图 3-4-(3) 之(b) 及(c) 所示。
π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
A A
S
a
a S
S a S
a a A a
A
S
b
S
A b
a a S b b
S b
A
A
第六章
/********************第六章会有点难
P1
(1)
E E1+T {if (E1.type = int) and (T.type = int )
then E.type := int
else E.type := real}
GO( ,a)={ }=
GO( ,b)={ }=
GO( ,S)={ , , , , }=
GO( ,A)={ , , , , , }=
GO( ,a)={ }=
GO( ,b)={ }=
GO( ,S)={ , , , , , }=
GO( ,A)={ , , , , }=
GO( ,a)={ }=
GO( ,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
(4)是,满足三个条件。
***************/
编译原理 第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章练习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.构造正规式1(0|1)*101相应的D FA.[答案]先构造NFA确定化============================================================== 2.将下图确定化:[答案]E、Z为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.构造一个D F A ,它接收Σ={0,1}上所有满足如下条件的字符串:每个1都有0直接跟在右边。
并给出该语言的正规式和正规文法。
[答案]按题意相应的正规表达式是0*(100*)*0* 构造相应的D F A ,首先构造N F A 为用子集法确定化可最小化,终态组为G 1={C, D},非终态组为G 2={S, A, B} 对于G2分析:f(S,0)=A, f(A,0)=A, 后继状态均属于G2 而f(B,0)=C, 后继状态属于G 1 将G2分割成G 21={S ,A}, G22={B}经检查DFA最小状态集有三个,可用S、B、D表示。
编译原理(第3版)课本习题答案

第二章 高级语言及其语法描述6.(1)L (G 6)={0,1,2,......,9}+(2)最左推导:N=>ND=>NDD=>NDDD=>DDDD=>0DDD=>01DD=>012D=>0127 N=>ND=>DD=>3D=>34N=>ND=>NDD=>DDD=>5DD=>56D=>568 最右推导:N=>ND =>N7=>ND7=>N27=>ND27=>N127=>D127=>0127 N=>ND=>N4=>D4=>34N=>ND=>N8=>ND8=>N68=>D68=>5687.【答案】G:S →ABC | AC | CA →1|2|3|4|5|6|7|8|9B →BB|0|1|2|3|4|5|6|7|8|9C →1|3|5|7|98.(1)最左推导:E=>E+T=>T+T=>F+T=>i+T=>i+T*F=>i+F*F=>i+i*F=>i+i*iE=>T=>T*F=>F*F=>i*F=>i*(E)=>i*(E+T)=>i*(T+T)=>i*(F+T)=>i*(i+T)=>i*(i+F)=> i*(i+i) 最右推导:E=>E+T=>E+T*F=>E+T*i=>E+F*i=>E+i*i=>T+i*i=>F+i*i=>i+i*iE=>T=>T*F=>T*(E)=>T*(E+T)=>T*(E+F)=>T*(E+i)=>T*(T+i)=>T*(F+i)=>T*(i+i)=>F*(i+i)=>i*(i+i) (2)9.证明:该文法存在一个句子iiiei 有两棵不同语法分析树,如下所示,因此该文法是二义的。
编译原理_第三版_课后答案

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
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
编译原理练习答案蒋宗礼第三章

在整个分裂过程中,所有新结点均用不同的名字,保留 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*相互都不等价,它们表示的含义如图所示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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) 由论断3、1,方程(4)得解为:C=c*c将上式代入(5),得:B=bB+c*c由论断3、1,得:B=b*c*c将上式代入(2),得:A=aA+b*bc*c由论断3、1,得: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 ,子集分裂得过程宣告结束。