编译原理及实现课后习题答案 孙悦红
编译原理及实现课后答案
5.1 考虑以下的文法:S→S;T|TT→a(1)为这个文法构造LR(0)的项目集规范族。
(2)这个文法是不是LR(0)文法?如果是,则构造LR(0)分析表。
(3)对输入串“a;a”进行分析。
解:(1)拓广文法G[S’]:0:S’→S1:S→S;T2:S→T3:T→a构造LR(0)项目集规范族(2)该文法不存在“归约-归约”和“归约-移进”冲突,因此是LR(0)文法。
LR(0)分析表如下:(3)对输入串“a;a”进行分析如下:5.2 证明下面文法是SLR(1)文法,但不是LR(0)文法。
S→AA→Ab|bBaB→aAc|a|aAb解:文法G[S]:0:S→A1:A→Ab2:A→bBa3:B→aAc4:B→a5:B→aAb状态5存在“归约-移进”冲突,状态9存在“归约-归约”冲突,因此该文法不是LR(0)文法。
状态5:FOLLOW(B)={a},因此,FOLLOW(B)∩{b}=Φ状态9:FOLLOW(B)={a},FOLLOW(A)={#,b,c},因此FOLLOW(B)∩FOLLOW(A)=Φ该SLR(1)分析表无重定义,因此该文法是SLR(1)文法,不是LR(0)文法。
5.3 证明下面文法是LR(1)文法,但不是SLR(1)文法。
S→AaAb|BbBaA→εB→ε解:拓广文法G[S’]:0:S’→S1:S→AaAb2:S→BbBa3:A→ε4:B→ε={a,b},即FOLLOW(A)∩FOLLOW(B)={a,b}≠Φ,所以该文法不是SLR(1)文法。
构造LR(1)项目集规范族:分析表无重定义,说明该文法是LR(1)文法,不是SLR(1)文法。
5.4 考虑以下的文法:E→EE+E→EE*E→a(1)为这个文法构造LR(1)项目集规范族。
(2)构造LR(1)分析表。
(3)为这个文法构造LALR(1)项目集规范族。
(4)构造LALR(1)分析表。
(5)对输入符号串“aa*a+”进行LR(1)和LALR(1)分析。
编译原理第二版课后习答案教学文稿
编译原理第二版课后习答案《编译原理》课后习题答案第一章第 1 章引论第 1 题解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍答案:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。
(2)源程序:源语言编写的程序称为源程序。
(3)目标程序:目标语言书写的程序称为目标程序。
(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。
通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。
(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。
(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。
第 2 题一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。
答案:一个典型的编译程序通常包含 8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。
其各部分的主要功能简述如下。
词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。
语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。
语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。
中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。
中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。
目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。
表格管理程序:负责建立、填写和查找等一系列表格工作。
编译原理及实现课后习题答案孙悦红
(,),i}(xy ) 3 xy=abcb |xy|=4 xyz=abcbaab|xyz|=7333(xy) =(abcb) =abcbabcbabcb | (xy) |=122.3设有文法G[S] : S :: =SS*|SS+|a ,写出符号串aa+a*规范推导,并构造语法树。
S => SS* => Sa* => SS+a* => Sa+a* => aa+a*2.4已知文法 G[Z] : Z : =U0l V1、 U : : =Z1 I 1、V : : =Z0 I 0 ,请写出全部由此文法描述的只含有四个符号的句子。
Z=>U0=>Z10=>U010=>1010 Z=>U0=>Z10=>V110=>0110 Z=>V1=>Z0 仁〉U00 仁>1001 Z=>V1=>Z01=>V101=>01012.5已知文法 G[S] : S :: =AB A :: =aA |e B :: =bBc I bc ,写出该文法描述的语言。
A : : =aA |e 描述的语言:{a n |n>=0}B : : =bBc I bc 描述的语言:{bn c n|n>=1} L(G[S])={a n bZ m n>=0,m>=1}2.6已知文法 E : =T I E+T I E-T 、T : : =F I T*F I T/F 、F : : =(E) I i ,写出该文法的开始符号、终结符号集合 V T 、非终结符号集合 V N 。
开始符号:E V t ={+, - , * , / ,x °=(aaa) 0= e|=0xx=aaaaaa 5 x =aaaaaaaaaaaaaaa A =A 1U A ^U ….U A 0 1 2A* = A U A U A U I x |xx|=65| x|=15U …={a,aa,aaa,aaaa,aaaaa …}••• U A n U …={ 2.2 令刀={a , b , c},又令 x=abc , y=b , e ,a,aa,aaa,aaaa,aaaaa …}z=aab ,写出如下符号串及它们的长度:xy ,xyz ,V n={E , F , T}(,),i}句子abba 合法。
(完整版)编译原理及实现课后习题答案
编译原理及实现课后习题解答2.1设字母表A={a},符号串x=aaa,写出下列符号串及其长度:x0,xx,x5 以及A+和A*.x0=(aaa)0=ε| x0|=0xx=aaaaaa |xx|=6x5=aaaaaaaaaaaaaaa | x5|=15A+ =A1∪A2∪ …. ∪A n∪…={a,aa,aaa,aaaa,aaaaa…}A* = A0 ∪A1 ∪A2 ∪…. ∪A n ∪…={ε,a,aa,aaa,aaaa,aaaaa…}2.2令∑={a,b,c},又令x=abc,y=b,z=aab,写出如下符号串及它们的长度:xy,xyz,(xy)3xy=abcb |xy|=4xyz=abcbaab |xyz|=7(xy)3=(abcb)3 =abcbabcbabcb | (xy)3 |=122.3设有文法G[S]:S∷=SS*|SS+|a,写出符号串aa+a*规范推导,并构造语法树。
S => SS* => Sa* => SS+a* => Sa+a* => aa+a*SS S *S S + aa a2.4 已知文法G[Z]:Z∷=U0∣V1 、U∷=Z1∣1 、V∷=Z0∣0 ,请写出全部由此文法描述的只含有四个符号的句子。
Z=>U0=>Z10=>U010=>1010Z=>U0=>Z10=>V110=>0110Z=>V1=>Z01=>U001=>1001Z=>V1=>Z01=>V101=>01012.5已知文法G[S]:S∷=AB A∷=aA︱εB∷=bBc︱bc , 写出该文法描述的语言。
A∷=aA︱ε描述的语言: {a n|n>=0}B∷=bBc︱bc 描述的语言:{b n c n|n>=1}L(G[S])={a n b m c m|n>=0,m>=1}2.6已知文法E∷=T∣E+T∣E-T 、T∷=F∣T*F∣T/F 、F∷=(E)∣i,写出该文法的开始符号、终结符号集合V T、非终结符号集合V N。
编译原理习题及答案 ppt课件
ppt课件
7
《编译原理教程》习题解析
8
在编译方式下,高级语言程序的执行是分两步进行 的:第一步首先将高级语言程序全部翻译成机器代码程序, 第二步才是执行这个机器代码程序。因此,编译对源程序 的处理是先翻译,后执行。
从执行速度上看,编译型的高级语言比解释型的高级 语言要快,但解释方式下的人机界面比编译型好,便于程 序调试。
ppt课件
24
《编译原理教程》习题解析
25
图2-5 正规式(ab)*a对应的NFA
ppt课件
25
《编译原理教程》习题解析
26
图2-6 正规式a(ba)*对应的NFA
ppt课件
26
《编译原理教程》习题解析
27
—
图2-7 图2-5和图2-6确定化后的状态转换矩阵
ppt课件
27
《编译原理教程》习题解析
C.汇编语言是计算机唯一能够直接识别并接受 的语言
D.高级语言接近人们的自然语言,但其依赖具 体机器的特性是无法改变的
ppt课件
2
《编译原理教程》习题解析
3
(2) 将编译过程分成若干“遍”是为了 。
A.提高程序的执行效率
B.使程序的结构更加清晰
C.利用有限的机器内存并提高机器的执行效率
D.利用有限的机器内存但降低了机器的执行效
编译原理及实现(孙悦红)期末复习
编译原理期末复习注:下面出现的字母中,若无特别说明,小写英文字母为终结符,大写英文字母为非终结符,希腊字母为终结符与非终结符的任意组合。
第一、二章(1)简述编译程序的概念及其构成答:1)编译程序:它特指把某种高级程序设计语言翻译成等价的低级程序设计语言的翻译程序。
2)构成:标识符的各种属性是在编译的不同阶段填入符号表的。
词法分析阶段只能分析出标识符名,语法分析阶段只能判断标识符在语句中出现是否合法,只有到了语义分析阶段,才能将标识符的各种属性填入符号表并使用这些属性生成中间代码。
(2)简述词法分析阶段的主要任务(也有可能问语法分析阶段主要任务)答:词法分析的任务是输入源程序,对源程序进行扫描,识别其中的单词符号,把字符串形式的源程序转换成单词符号形式的源程序。
语法分析的主要任务是对输入的单词符号进行语法分析(根据语法规则进行推导或者归约),识别各类语法单位,判断输入是不是语法上正确的程序即:检查这个符号串是否为该程序语言的句子。
若是,输出该句子的分析树;若不是,则表示源程序存在语法错误,需要报告错误的性质和位置。
代码进行优化的目的:提高目标程序的执行效率。
代码优化首先在中间代码上进行。
代码优化不是编译程序的必要组成部分,不同的编译程序所进行的代码优化程度差别很大,能够完成代码优化的编译程序称为“优化编译程序”。
编译的最后一步是将中间代码生成特定机器上的低级语言代码。
这部分与机器类型有关,对程序中的每个变量指定存贮单元,把中间代码的指令翻译成等价的某种类型机器的机器指令代码或汇编指令代码。
目标代码的形式可以使绝对指令代码、可重定位的机器指令代码或汇编指令代码。
(3)高级语言的特点:(4) 说明解释和编译的区别:1)编译要程序产生目标程序,解释程序是边解释边执行,不产生目标程序;2)编译程序运行效率高而解释程序便于人机对话。
解释:以源程序作为输入,输入一句解释执行一句,不产生完整的目标程序,相应的翻译程序称为解释程序(Interpreter) 。
《编译原理》习题解答
《编译原理》习题解答:第一次作业:P14 2、何谓源程序、目标程序、翻译程序、汇编程序、编译程序和解释程序?它们之间可能有何种关系?答:被翻译的程序称为源程序;翻译出来的程序称为目标程序或目标代码;将汇编语言和高级语言编写的程序翻译成等价的机器语言,实现此功能的程序称为翻译程序;把汇编语言写的源程序翻译成机器语言的目标程序称为汇编程序;解释程序不是直接将高级语言的源程序翻译成目标程序后再执行,而是一个个语句读入源程序,即边解释边执行;编译程序是将高级语言写的源程序翻译成目标语言的程序。
关系:汇编程序、解释程序和编译程序都是翻译程序,具体见P4 图 1.3。
P14 3、编译程序是由哪些部分组成?试述各部分的功能?答:编译程序主要由8个部分组成:(1)词法分析程序;(2)语法分析程序;(3)语义分析程序;(4)中间代码生成;(5)代码优化程序;(6)目标代码生成程序;(7)错误检查和处理程序;(8)信息表管理程序。
具体功能见P7-9。
P14 4、语法分析和语义分析有什么不同?试举例说明。
答:语法分析是将单词流分析如何组成句子而句子又如何组成程序,看句子乃至程序是否符合语法规则,例如:对变量x:= y 符合语法规则就通过。
语义分析是对语句意义进行检查,如赋值语句中x与y类型要一致,否则语法分析正确,语义分析则错误。
P15 5、编译程序分遍由哪些因素决定?答:计算机存储容量大小;编译程序功能强弱;源语言繁简;目标程序优化程度;设计和实现编译程序时使用工具的先进程度以及参加人员多少和素质等等。
补充:1、为什么要对单词进行内部编码?其原则是什么?对标识符是如何进行内部编码的?答:内部编码从“源字符串”中识别单词并确定单词的类型和值;原则:长度统一,即刻画了单词本身,也刻画了它所具有的属性,以供其它部分分析使用。
对于标识符编码,先判断出该单词是标识符,然后在类别编码中写入相关信息,以表示为标识符,再根据具体标识符的含义编码该单词的值。
编译原理及实践教程第1章参考答案
1.翻译程序:能够将某种语言写的程序转换成另一种语言的程序,而且后者与前者在逻辑上是等价的。
编译程序:是一种将高级语言程序(源程序)翻译成低级语言(目标程序)的程序解释程序:接受某高级语言的一个语句输入,进行解释并控制计算机执行,马上得到这句的执行结果,然后再接受下一句。
源程序:被翻译的程序。
目标程序:翻译后的程序。
遍:对源程序或源程序的中间结果从头到尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序。
编译前端:主要指与源语言有关,与目标语言无关的部分,通常包括词法分析、语法分析、语义分析和中间代码生成,与机器无关部分的代码优化编译后端:指与目标机器有关的部分。
如与机器有关的优化、目标代码生成2.高级语言程序有哪两种执行方式?其特点是什么?阐述其主要异同点。
答:高级语言程序有编译程序和解释程序两种执行方式;编译程序(Compiler)——将高级程序设计语言程序翻译成逻辑上等价的低级语言(汇编语言,机器语言)程序的翻译程序。
解释程序(Interpreter)——将高级程序设计语言写的源程序作为输入,边解释边执行源程序本身,而不产生目标程序的翻译程序。
3.编译过程可分为哪些阶段?各个阶段的主要任务是什么?答:编译过程逻辑上可分为五个阶段:词法分析、语法分析、语义分析与中间代码生成、代码优化、目标代码生成。
第一阶段:词法分析任务: 从左到右扫描源程序,识别出每个单词第二阶段:语法分析任务: 在词法分析的基础上,根据语言的语法规则,将单词符号串分解成各类语法短语(例:程序、语句、表达式)。
第三阶段:语义分析和中间代码生成任务:对语法分析所识别出的各类语法范畴分析其含义,进行初步的翻译(翻译成中间代码)。
第四阶段:代码优化任务:对已产生的中间代码进行加工变换,使生成的目标代码更为高效(时间和空间)。
第五阶段:目标代码的生成任务:把中间代码(或经优化的中间代码)变换成特定机器上的低级语言代码。
4. 编译程序有哪些主要构成成分?各自的主要功能是什么?答:(1) 记号(token)当扫描程序将字符收集到一个记号中时,它通常是以符号表示这个记号;这也就是说,作为一个枚举数据类型的值来表示源程序的记号集。
编译原理习题及答案(整理后)
5、自下而上的语法分析中,应从 开始分析。 a. 句型 b. 句子 c. 以单词为单位的程序 d. 文法的开始符 e. 句柄 6、对正规文法描述的语言,以下 有能力描述它。 a.0型文法 b.1型文法 c.上下文无关文法 d.右线性文法 e.左线 性文法 三、填空题 1、文法中的终结符和非终结符的交集是 。词法分析器交给语法 分析器的文法符号一定是 ,它一定只出现在产生式的 部。 2、最左推导是指每次都对句型中的 非终结符进行扩展。 3、在语法分析中,最常见的两种方法一定是 分析法,另一是 分析法。 4、采用 语法分析时,必须消除文法的左递归。 5、 树代表推导过程, 树代表归约过程。 6、自下而上分析法采用 、归约、错误处理、 等四种操作。 7、Chomsky把文法分为 种类型,编译器构造中采用 和 文 法,它们分别产生 和 语言,并分别用 和 自动机识别所产 生的语言。 四、判断题 1、文法 S→aS|bR|ε描述的语言是(a|bc)* ( ) R→cS 2、在自下而上的语法分析中,语法树与分析树一定相同。 ( ) 3、二义文法不是上下文无关文法。 ( ) 4、语法分析时必须先消除文法中的左递归。 ( ) 5、规范归约和规范推导是互逆的两个过程。 ( ) 6、一个文法所有句型的集合形成该文法所能接受的语言。 ( ) 五、简答题 1、句柄 2、素短语 3、语法树 4、归约 5、推导 六、问答题 1、给出上下文无关文法的定义。 2、文法G[S]: S→aSPQ|abQ QP→PQ bP→bb
E E + F E + T P T i P #<·+·>+<·i·># 图2-8-1 句型P+T+I的语法及优先关系
6、选c。
7、由图2-8-1的语法树和优先关系可以看出应选b。
《编译原理实践及应用》习题的参考答案
附录部分习题参考答案第1章参考答案:1,2,3,4,5,6,7解答:略!第2章参考答案:1,2,3:解答:略!4. 解答:A:① B:③ C:① D:②5. 解答:用E表示<表达式>,T表示<项>,F表示<因子>,上述文法可以写为:E → T | E+TT → F | T*FF → (E) | i最左推导:E=>E+T=>E+T+T=>T+T+T=>F+T+T=>i+T+T=>i+F+T=>i+i+T=>i+i+F=>i+i+iE=>E+T=>T+T=>F+T=>i+T=>i+T*F=>i+F*F=>i+i*F=>i+i*i 最右推导:E=>E+T=>E+F=>E+i=>E+T+i=>E+F+i=>E+i+i=>T+i+i=>F+i+i=>i+i+iE=>E+T=>E+T*F=>E+T*i=>E+F*i=>E+i*i=>T+i*i=>F+i*i =>i+i*ii+i+i和i+i*i的语法树如下图所示。
i+i+i、i+i*i的语法树6. 解答:(1) 终结符号为:{or,and,not,(,),true,false}非终结符号为:{bexpr,bterm,bfactor}开始符号为:bexpr(2) 句子not(true or false)的语法树为:7. 解答:(1) 把a n b n c i分成a n b n和c i两部分,分别由两个非终结符号生成,因此,生成此文法的产生式为:S → ABA → aAb|abB → cB|ε(2) 令S为开始符号,产生的w中a的个数恰好比b多一个,令E为一个非终结符号,产生含相同个数的a和b的所有串,则产生式如下:S → aE|Ea|bSS|SbS|SSbE → aEbE|bEaE|ε(3) 设文法开始符号为S,产生的w中满足|a|≤|b|≤2|a|。
编译原理习题及答案(课堂PPT)
.
8
《编译原理教程》习题解析
9
1.3 请画出编译程序的总框图。如果你是一个编译程 序的总设计师,设计编译程序时应当考虑哪些问题?
【解答】 编译程序总框图如图1-1所示。 作为一个编译程序的总设计师,首先要深刻理解被编 译的源语言其语法及语义;其次,要充分掌握目标指令的 功能及特点,如果目标语言是机器指令,还要搞清楚机器 的硬件结构以及操作系统的功能;第三,对编译的方法及 使用的软件工具也必须准确化。总之,总设计师在设计编 译程序时必须估量系统功能要求、硬件设备及软件工具等 诸因素对编译程序构造的影响。
《编译原理教程》习题解析
1
第一章 绪 论 第二章 词 法 分 析 第三章 语 法 分 析
.
1
《编译原理教程》习题解析
2
第一章 绪 论
1.1 完成下列选择题: (1) 下面叙述中正确的是 。
A.编译程序是将高级语言程序翻译成等价的机 器语言程序的程序
B.机器语言因其使用过于困难,所以现在计算 机根本不使用机器语言
.
5
《编译原理教程》习题解析
6
(4) 编译各阶段的工作都涉及到构造、查找或更新有 关表格,即编译过程的绝大部分时间都用在造表、查表和 更新表格的事务上。故选D。
(5) 由(1)可知,编译程序实际上实现了对高级语言程 序的翻译。故选D。
.
6
《编译原理教程》习题解析
7
1.2 计算机执行用高级语言编写的程序有哪些途径?它们 之间的主要区别是什么?
.
12
《编译原理教程》习题解析
13
图2-1 习题2.1的DFA M
编译原理-第1~5章习题课答案
选择题2答案
编译原理的主要目的是将高级语言编写的 程序转换成低级语言编写的程序,以提高 程序的运行效率和可移植性。
编译过程主要包括词法分析、语法分析、 语义分析、中间代码生成、代码优化和目 标代码生成等阶段。
选择题3答案
选择题4答案
词法分析是将源程序分解成一个个的单词 或符号,供语法分析器识别和匹配。
编译原理-第1~5章习题课答案
目录
CONTENTS
• 第一章习题答案 • 第二章习题答案 • 第三章习题答案 • 第四章习题答案 • 第五章习题答案
01 第一章习题答案
CHAPTER
填空题答案
填空题1答案
编译原理是将高级语言编写的程 序转换成低级语言编写的程序的
过程。
填空题2答案
编译过程主要包括词法分析、语法 分析、语义分析、中间代码生成、 代码优化和目标代码生成等阶段。
• 简答题3答案:编译器的输入是源程序,输出是目标程序。源程序是用高级语言编写的程序,目标程序是用低级语言编 写的程序。
02 第二章习题答案
CHAPTER
填空题答案
填空题1答案
编译原理是将高级语言编写的程序转 换成低级语言编写的程序的过程。
02
填空题2答案
编译过程主要包括词法分析、语法分 析、语义分析、中间代码生成、代码 优化和目标代码生成等阶段。
是编译过程的基础。
简答题3答案
编译原理中的语义分析阶段主要 包括类型检查、语义检查和符号 表管理等任务,以确保源程序的
语义正确性。
04 第四章习题答案
CHAPTER
填空题答案
填空题1答案
01
编译原理是将高级语言编写的程序转换成低级语言编写的程序
编译原理课后习题答案
第一章1.典型的编译程序在逻辑功能上由哪几部分组成?答:编译程序主要由以下几个部分组成:词法分析、语法分析、语义分析、中间代码生成、中间代码优化、目标代码生成、错误处理、表格管理。
2. 实现编译程序的主要方法有哪些?答:主要有:转换法、移植法、自展法、自动生成法。
3. 将用户使用高级语言编写的程序翻译为可直接执行的机器语言程序有哪几种主要的方式?答:编译法、解释法。
4. 编译方式和解释方式的根本区别是什么?答:编译方式:是将源程序经编译得到可执行文件后,就可脱离源程序和编译程序单独执行,所以编译方式的效率高,执行速度快;解释方式:在执行时,必须源程序和解释程序同时参与才能运行,其不产生可执行程序文件,效率低,执行速度慢。
第二章1.乔姆斯基文法体系中将文法分为哪几类?文法的分类同程序设计语言的设计与实现关系如何?答:1)0型文法、1型文法、2型文法、3型文法。
2)2. 写一个文法,使其语言是偶整数的集合,每个偶整数不以0为前导。
答:Z→SME | BS→1|2|3|4|5|6|7|8|9M→ε | D | MDD→0|SB→2|4|6|8E→0|B3. 设文法G为:N→ D|NDD→ 0|1|2|3|4|5|6|7|8|9请给出句子123、301和75431的最右推导和最左推导。
答:N⇒ND⇒N3⇒ND3⇒N23⇒D23⇒123N⇒ND⇒NDD⇒DDD⇒1DD⇒12D⇒123N⇒ND⇒N1⇒ND1⇒N01⇒D01⇒301N⇒ND⇒NDD⇒DDD⇒3DD⇒30D⇒301N⇒ND⇒N1⇒ND1⇒N31⇒ND31⇒N431⇒ND431⇒N5431⇒D5431⇒75431N⇒ND⇒NDD⇒NDDD⇒NDDDD⇒DDDDD⇒7DDDD⇒75DDD⇒754DD⇒7543D⇒75431 4. 证明文法S→iSeS|iS| i是二义性文法。
答:对于句型iiSeS存在两个不同的最左推导:S⇒iSeS⇒iiSesS⇒iS⇒iiSeS所以该文法是二义性文法。
编译原理习题解答
第一章习题解答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)。
</l第二章习题解答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 章引论第 1 题解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍答案:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。
(2)源程序:源语言编写的程序称为源程序。
(3)目标程序:目标语言书写的程序称为目标程序。
(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。
通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。
(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。
(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。
第 2 题一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。
答案:一个典型的编译程序通常包含 8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。
其各部分的主要功能简述如下。
词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。
语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。
语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。
中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。
中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。
目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。
表格管理程序:负责建立、填写和查找等一系列表格工作。
表格的作用是记录源程序的各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。
编译原理及实现课后习题答案孙悦红 (1)
|xyz|=7 | (xy)3 |=12
2.3 设有文法 G[S]�S∷=SS*|SS+|a�写出符号串 aa+a*规范推导�并构造语 法树。
S => SS* => Sa* => SS+a* => Sa+a* => aa+a*
S
S
S
*
SS+a
aa
2.4 已知文法 G[Z]�Z∷=U0∣V1 、 U∷=Z1∣1 、 V∷=Z0∣0 ,请写出 全部由此文法描述的只含有四个符号的句子。
+i#
POP,NEXTSYM
18
#E’T
i#
POP,PUSH(T’F)
所用产生式 E→TE’ T→FT’ F→i
T’→ε E’→+TE’
T→FT’ F→i
T’→*FT’
F→i
T’→ε E’→+TE’
T→FT’
19 20 21 22 23 �2�i*(i+i+i) 步骤
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
N 错误
INPUTSYM=下一个符号
INPUTSYM=’b’ Y
N 出口
4.2 设有文法 G[Z]� Z∷=(A) , A∷=a|Bb , B∷=Aab 若采用递归下降分析方法�对此文法来说�在分析过程中�能否避免回溯�为什么�
解�若采用递归下降分析方法�对此文法来说�在分析过程中不能避免回朔。因为规则 A ∷=a|Bb 和规则 B∷=Aab 构成了间接左递归�不满足实现没有回溯的递归下降分析方法的 条件�1��书 P67��且规则 A: := a|Bb�FIRST(a)={a}�FIRST(Bb)={a}�即此规则候选式 的首符号集有相交�不满足实现没有回溯的递归下降分析方法的条件�2��书 P67��在分 析过程中�将造成回溯。
编译原理习题及答案(整理后)
编译原理习题及答案(整理后)第一章1、将编译程序分成若干个“遍”是为了b.使程序的结构更加清晰2、构造编译程序应掌握a.源程序b.目标语言c.编译方法3、变量应当c.既持有左值又持有右值4、编译程序绝大多数时间花在上。
d.管理表格5、不可能是目标代码。
d.中间代码6、使用可以定义一个程序的意义。
a.语义规则7、词法分析器的输入是b.源程序8、中间代码生成时所遵循的是-c.语义规则9、编译程序是对d.高级语言的翻译10、语法分析应遵循c.构词规则二、多项选择题1、编译程序各阶段的工作都涉及到b.表格管理c.出错处理2、编译程序工作时,通常有阶段。
a.词法分析三、填空题b.语法分析c.中间代码生成e.目标代码生成1、解释程序和编译程序的区别在于是否生成目标程序2、编译过程通常可分为5个阶段,分别是词法分析、语法分析中间代码生成、代码优化和目标代码生成。
3、编译程序工作过程中,第一段输入是源程序,最后阶段的输出为标代码生成程序。
4、编译程序是指将源程序程序翻译成目标语言程序的程序。
一、单项选择题1、文法G:S→某S某|y所识别的语言是a.某y某b.(某y某)某c.某ny某n(n≥0)d.某某y某某2、文法G描述的语言L(G)是指α,α∈VT某}a.L(G)={α|S+某α,α∈V某}b.L(G)={α|ST某α,α∈(V∪V某)}d.L(G)={α|S+α,α∈(V∪V某)}c.L(G)={α|STNTN3、有限状态自动机能识别a.上下文无关文法c.正规文法b.上下文有关文法d.短语文法4、设G为算符优先文法,G的任意终结符对a、b有以下关系成立a.若f(a)>g(b),则a>bc.a~b都不一定成立b.若f(a)5、如果文法G是无二义的,则它的任何句子αa.最左推导和最右推导对应的语法树必定相同b.最左推导和最右推导对应的语法树可能不同c.最左推导和最右推导必定相同d.可能存在两个不同的最左推导,但它们对应的语法树相同6、由文法的开始符经0步或多步推导产生的文法符号序列是a.短语b.句柄c.句型d.句子7、文法G:E→E+T|TT→T某P|PP→(E)|I则句型P+T+i的句柄和最左素短语为a.P+T和ib.P和P+Tc.i和P+T+id.P和T8、设文法为:S→SA|AA→a|b则对句子aba,下面是规范推导。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.1 设字母表A={a},符号串x=aaa,写出下列符号串及其长度:x0,xx,x5以及A+和A*.x0=(aaa)0=ε | x0|=0xx=aaaaaa |xx|=6x5=aaaaaaaaaaaaaaa | x5|=15A+ =A1∪A2∪…. ∪A n∪…={a,aa,aaa,aaaa,aaaaa…}A* = A0 ∪A1 ∪ A2∪…. ∪ A n∪…={ε,a,aa,aaa,aaaa,aaaaa…}2.2 令∑={a,b,c},又令x=abc,y=b,z=aab,写出如下符号串及它们的长度:xy,xyz,(xy)3xy=abcb |xy|=4xyz=abcbaab |xyz|=7(xy)3=(abcb)3 =abcbabcbabcb | (xy)3 |=122.3设有文法G[S]:S∷=SS*|SS+|a,写出符号串aa+a*规范推导,并构造语法树。
S => SS* => Sa* => SS+a* => Sa+a* => aa+a*2.4 已知文法G[Z]:Z∷=U0∣V1 、 U∷=Z1∣1 、 V∷=Z0∣0 ,请写出全部由此文法描述的只含有四个符号的句子。
Z=>U0=>Z10=>U010=>1010Z=>U0=>Z10=>V110=>0110Z=>V1=>Z01=>U001=>1001Z=>V1=>Z01=>V101=>01012.5 已知文法G[S]: S∷=AB A∷=aA︱ε B∷=bBc︱bc , 写出该文法描述的语言。
A∷=aA︱ε描述的语言: {a n|n>=0}B∷=bBc︱bc描述的语言:{b n c n|n>=1}L(G[S])={a n b m c m|n>=0,m>=1}2.6 已知文法E∷=T∣E+T∣E-T 、 T∷=F∣T*F∣T/F 、 F∷=(E)∣i,写出该文法的开始符号、终结符号集合V T、非终结符号集合V N。
开始符号:EV t={+, - , * , / ,( , ), i}V n={E , F , T}2.7 对2.6题的文法,写出句型T+T*F+i 的短语、简单短语以及句柄。
短语:T+T*F+i T+T*F i i T T*F 简单短语:i T*F T句柄:T2.8 设有文法G[S]:S ∷=S*S|S+S|(S)|a ,该文法是二义性文法吗?根据所给文法推导出句子a+a*a ,画出了两棵不同的语法树,所以该文法是二义性文法。
2.9 写一文法,使其语言是奇正整数集合。
A::=1|3|5|7|9|NAN::=0|1|2|3|4|5|6|7|8|92.10给出语言{a n b m |n,m ≥1}的文法。
G[S]: S::=AB A::=aA|a B::=bB|b3.1 有正则文法G[Z]:Z::=Ua|Vb ,U::=Zb|b ,V::=Za|a ,画出该文法的状态图,并检查句子abba 是否合法。
解:该文法的状态图如下:句子abba 合法。
3.2 状态图如图3.35所示,S为开始状态,Z为终止状态。
写出相应的正则文法以及V,V n 和V t。
图3-35状态图解:左线性文法G[Z]: 右线性文法G’[S]:Z::=Ab|b S::=aA|bA::=Aa|a A::=aA|bV={Z,A,a,b} V={S,A,a,b}V n={Z,A} V n={S,A}V t={a,b} V t={a,b}3.3 构造下列正则表达式相应的NFA:1(1|0)*|01(1010*|1(010)*1)*0解:正则表达式:1(1|0)*|01、2、3、4、正则表达式:1(1010*|1(010)*1)*03.4将图3.36的NFA M确定化DFA:3.5将图3.37的DFA 化简。
q0={0,1} q1={2,4}q2={3,5}化简后的DFA :4.1 对下面文法,设计递归下降分析程序。
S→aAS|(A) , A→Ab|c解:首先将左递归去掉,将规则A→Ab|c 改成 A→c{b} 非终结符号S的分析程序如下:非终结符号A的分析程序如下:4.2 设有文法G[Z]:Z∷=(A) , A∷=a|Bb , B∷=Aab若采用递归下降分析方法,对此文法来说,在分析过程中,能否避免回溯?为什么?解:若采用递归下降分析方法,对此文法来说,在分析过程中不能避免回朔。
因为规则A ∷=a|Bb和规则B∷=Aab构成了间接左递归,不满足实现没有回溯的递归下降分析方法的条件(1)(书P67),且规则 A: := a|Bb,FIRST(a)={a},FIRST(Bb)={a},即此规则候选式的首符号集有相交,不满足实现没有回溯的递归下降分析方法的条件(2)(书P67),在分析过程中,将造成回溯。
改写文法可避免回溯:将规则B∷=Aab代入规则A∷=a|Bb得:A∷=a|Aabb,再转换成:A∷=a{abb},可避免回溯。
4.3 若有文法如下,设计递归下降分析程序。
<语句>→<语句><赋值语句>|ε<赋值语句>→ID=<表达式><表达式>→<项>|<表达式>+<项>|<表达式>-<项><项>→<因子>|<项>*<因子>|<项>/<因子><因子>→ID|NUM|(<表达式>)解:首先,去掉左递归<语句>→<语句><赋值语句>|ε改为: <语句>→{<赋值语句>}<表达式>→<项> | <表达式> + <项> | <表达式> - <项>改为:<表达式>→<项>{(+ | -)<项>}<项>→<因子> | <项> * <因子> | <项> / <因子>改为:<项>→<因子>{(* | /)<因子>}则文法变为:<语句>→{<赋值语句>} <赋值语句>→ID=<表达式><表达式>→<项>{(+ | -)<项>} <项>→<因子>{(* | /)<因子>} <因子>→ID|NUM|(<表达式>)非终结符号 <赋值语句>的分析程序如下:非终结符号 <表达式> 的分析程序如下:非终结符号 <项> 的分析程序如下:非终结符号 <因子> 的分析程序如下:复值语句的分析程序4.4 有文法G[A]:A::=aABe|ε,B::=Bb|b(1)求每个非终结符号的FOLLOW集。
(2)该文法是LL(1)文法吗?(3)构造LL(1)分析表。
解:(1)FOLLOW(A)=First(B)∪{#}={b,#}FOLLOW(B)={e,b}(2)该文法中的规则B::=Bb|b为左递归,因此该文法不是LL(1)文法(3)先消除文法的左递归(转成右递归),文法变为:A::=aABe|ε,B::=bB’,B’=bB’|ε,该文法的LL(1)分析表为:4.5 若有文法A→(A)A|ε(1)为非终结符A构造FIRST集合和FOLLOW集合。
(2)说明该文法是LL(1)的文法。
解:(1)FIRST(A)={(,ε}FOLLOW(A)={),#}(2)该文法不含左递归;FIRST((A)A)={(},FIRST(ε)={ε},FIRST((A)A)∩FIRST(ε)=Φ,且FOLLOW(A)={),#},FIRST((A)A)∩ FOLLOW(A) =Φ,因此,该文法满足LL(1)文法的条件,是LL(1)文法。
4.6 利用分析表4-1,识别以下算术表达式,请写出分析过程。
(1)i+i*i+i(2)i*(i+i+i)解:(1)i+i*i+i4.7 考虑下面简化了的C声明文法:<声明语句>→<类型><变量表>;<类型>→int|float|char<变量表>→ID,<变量表>|ID(1)在该文法中提取左因子。
(2)为所得的文法的非终结符构造FIRST集合和FOLLOW集合。
(3)说明所得的文法是LL(1)文法。
(4)为所得的文法构造LL(1)分析表。
(5)假设有输入串为“char x,y,z;”,写出相对应的LL(1)分析过程。
解:(1)规则<变量表>→ID,<变量表>|ID提取公因子如下:<变量表>→ID(,<变量表>|ε)增加新的非终结符<变量表1>,规则变为:<变量表>→ID<变量表1><变量表1>→,<变量表>|εC声明文法改变为:<声明语句>→<类型><变量表>;<类型>→int|float|char<变量表>→ID<变量表1><变量表1>→,<变量表>|ε(2)FIRST(<声明语句>)=FIRST(<类型>)={int,float,char}FIRST(<变量表>)={ID}FIRST(<变量表1>)={,,ε}FOLLOW(<声明语句>)={#}FOLLOW(<类型>)=FIRST(<变量表>)={ID}FOLLOW(<变量表>)=FOLLOW(<变量表1>)={;}(3)所得文法无左递归,且FIRST(int)∩FIRST(float)∩FIRST(char)=ΦFIRST(,<变量表>)∩FIRST(ε)=ΦFIRST(,<变量表>)∩FOLLOW(<变量表1>)=Φ因此,所得文法为LL(1)文法。
(4)所得的文法构造LL(1)分析表如下所示:更常用且简单的LL(1)分析表:(5)输入串“char x,y,z;”相对应的LL(1)分析过程如下:5.1 考虑以下的文法:S→S;T|TT→a(1)为这个文法构造LR(0)的项目集规范族。