中南大学《编译原理》课程作业(在线作业)三及参考答案

合集下载

编译原理试题参考答案

编译原理试题参考答案

编译原理试题参考答案编译原理试题参考答案编译原理是计算机科学中的一门重要课程,它研究的是将高级语言源代码转换成机器语言的过程。

在学习编译原理的过程中,试题是一种常见的考核方式。

下面是一些编译原理试题的参考答案,希望对大家的学习有所帮助。

1. 什么是编译器?编译器是一种将高级语言源代码转换成机器语言的程序。

它包括了词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等多个阶段。

编译器的主要作用是将高级语言源代码转换成可执行的机器语言程序。

2. 什么是词法分析?词法分析是编译器的第一个阶段,它将源代码分解成一个个的词法单元,比如关键字、标识符、常量和运算符等。

词法分析器通常使用有限自动机来实现,它可以根据事先定义好的词法规则来识别源代码中的词法单元。

3. 什么是语法分析?语法分析是编译器的第二个阶段,它将词法分析得到的词法单元组织成一个语法树。

语法分析器通常使用上下文无关文法来描述语法规则,并通过递归下降、LL(1)分析或LR分析等算法来进行语法分析。

4. 什么是语义分析?语义分析是编译器的第三个阶段,它对语法树进行语义检查和语义规则的处理。

语义分析器通常会进行类型检查、符号表管理和语义规则的处理,以确保源代码的语义正确性。

5. 什么是中间代码生成?中间代码生成是编译器的第四个阶段,它将语法树转换成一种中间表示形式,比如三地址码、虚拟机代码或抽象语法树。

中间代码是一种与具体机器无关的表示形式,它方便后续的代码优化和目标代码生成。

6. 什么是代码优化?代码优化是编译器的第五个阶段,它通过对中间代码的分析和变换,来改进程序的执行效率和资源利用率。

代码优化的目标是在保持程序语义不变的前提下,尽可能地减少程序的执行时间和资源消耗。

7. 什么是目标代码生成?目标代码生成是编译器的最后一个阶段,它将中间代码转换成目标机器的机器语言程序。

目标代码生成器通常会进行寄存器分配、指令选择和指令调度等操作,以生成高效的目标代码。

编译原理课后习题答案ch3

编译原理课后习题答案ch3

盛威网()专业的计算机学习网站
8
《编译原理》课后习题答案第三章
第 17 题 习题7和习题 11 中的文法等价吗? 答案: 等价。 第 18 题 解释下列术语和概念: (1) 字母表 (2) 串、字和句子 (3) 语言、语法和语义 答案: (1)字母表:是一个非空有穷集合。 (2)串:符号的有穷序列。 字:字母表中的元素。 句子:如果 Z
盛威网()专业的计算机学习网站
4
《编译原理》课后习题答案第三章
第8题 文法 G[S]为: S→Ac|aB A→ab B→bc 该文法是否为二义的?为什么?
答案: 对于串 abc (1)S=>Ac=>abc (2)S=>aB=>abc 即存在两不同的最右推导。所以,该文法是二义的。 或者: 对输入字符串 abc,能构造两棵不同的语法树,所以它是二义的。 S S
盛威网()专业的计算机学习网站
9
《编译原理》课后习题答案第三章
附加题
问题 1: 给出下述文法所对应的正规式: S→0A|1B A→1S|1 B→0S|0 答案: R = (01 | 10) ( 01 | 10 )* 问题 2: 已知文法 G[A],写出它定义的语言描述 G[A]: A → 0B|1C B → 1|1A|0BB C → 0|0A|1CC 答案: G[A]定义的语言由 0、1 符号串组成,串中 0 和 1 的个数相同. 问题 3: 给出语言描述,构造文法. 构造一文法,其定义的语言是由算符+, *, (,)和运算对象 a 构成的算术表达式的集合. 答案一: G[E] E→E+T|T T→T* F|F F→(E)|a 答案二: G[E] E→E+E|E* E|(E)|a
问题 4: 已知文法 G[S]: S→dAB

《编译原理》作业参考答案

《编译原理》作业参考答案

《编译原理》作业参考答案一、填空1.图二图一。

2.文法是无ε产生式,且任意两个终结符之间至多有一种优先关系的算符文法。

3.最右推导最右推导。

4.对于循环中的有些代码,如果它产生的结果在循环中是不变的,就把它提到循环外来。

把程序中执行时间较长的运算替换为执行时间较短的运算。

5.对于文法中的每个非终结符A的各个产生式的候选首符集两两不相交;对文法中的每个非终结符A,若它存在某个候选首符集包含ε,则FIRST(A)∩FOLLOW(A)= ø6.控制。

7.语义分析和中间代码产生8.自上而下自下而上自上而下9.自下而上表达式10.自下而上11.源程序单词符号12. DFA初态唯一,NFA初态不唯一;DFA弧标记为Σ上的元素,NFA弧标记为Σ*上的元素;DFA的函数为单射,NFA函数不是单射13.词法,词法分析器,子程序,语法14.ε,a,ab,ab15.终结符号,非终结符号,产生式16.L(G)={a n | n≥1}17.1型,2型,3型18.二义的19.快20.终态,输入字21.单词符号,终结符22.归约23.必须24.直接25.终结符,更快26.E→E+∙T, E→E∙+T, E→∙E+T, E→E+T∙27.归约—归约28.类型检查,一致性检查29.词法分析、词法30.语法分析程序、语法31。

终结符号、产生式、开始符号、非终结符32.2、2、333.不需要避开34.符合、不符合35.推导36.包括37.Ass38.一定没有、一定没有、至多只有一个39.SLR(1)40.移进——归约41.a.控制流检查、b.一致性检查、c.相关名字检查二、判断下面语法是否正确1 ×2 ×3 √4 ×5 √6 ×三、简答题1.词法分析的任务是对输入的源程序进行单词及其属性的识别,为下一步的语法分析进行铺垫;有两种方法可以实现词法分析器:一,手工编写词法分析程序。

二,由词法分析器自动生成程序生成。

编译原理习题及答案

编译原理习题及答案

( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 10.× 22.√
) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) 11.
二、填空题: 2.编译过程可分为 ( 词法分析) , (语法分析) , (语义分析与中间代码生成 ) , (优化)和(目标 代码生成 )五个阶段。 3.如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是( 二义性的 4.从功能上说,程序语言的语句大体可分为( 5.语法分析器的输入是( 单词符号 6.扫描器的任务是从( 源程序中 执行性 )语句和(说明性 ) 。 ) 。 ) ,其输出是( 语法单位 )中识别出一个个( 单词符号 ) 。 )语句两大类。
因此,文法 G[为二义文法。
五.计算题(10 分) 已知文法 A->aAd|aAb| ε
判断该文法是否是 SLR(1) 文法,若是构造相应分析表,并对输入串 ab# 给出分析过程。 解:增加一个非终结符 S/后,产生原文法的增广文法有: S'->A A->aAd|aAb|ε 下 面 构 造 它 的 LR(0) 项 目 集 规 范 族 为 :
对输入串 ab#给出分析过程为:
一、是非题:
1.一个上下文无关文法的开始符,可以是终结符或非终结符。 2.一个句型的直接短语是唯一的。 3.已经证明文法的二义性是可判定的。 4.每个基本块可用一个 DAG 表示。 5.每个过程的活动记录的体积在编译时可静态确定。 6.2 型文法一定是 3 型文法。 7.一个句型一定句子。 8.算符优先分析法每次都是对句柄进行归约。 X 9.采用三元式实现三地址代码时,不利于对中间代码进行优化。 10.编译过程中,语法分析器的任务是分析单词是怎样构成的。 11.一个优先表一定存在相应的优先函数。 13.递归下降分析法是一种自下而上分析法。 14.并不是每个文法都能改写成 LL(1)文法。 15.每个基本块只有一个入口和一个出口。 16.一个 LL(1)文法一定是无二义的。 17.逆波兰法表示的表达试亦称前缀式。 18.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。 19.正规文法产生的语言都可以用上下文无关文法来描述。 20.一个优先表一定存在相应的优先函数。 21.3 型文法一定是 2 型文法。 22.如果一个文法存在某个句子对应两棵不同的语法树, 则文法是二义性的。 答案:1.× 12.√ 13.× 2.× 14.√ 3.× 15.√ 4.√ 16.√ 5.√ 17.× 6.× × 18.√ 19.√ 20.× 21.√ 7.× 8.× 9.√ X 12.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。

编译原理第三章答案

编译原理第三章答案

“编译技术”第三章作业3-1构造下列正规式相应的DFA:(1)1(0|1)*101(2)a((a|b)*|ab*a)*b解:由转换系统构造确定有穷自动机对状态重命名:DFA的状态转换图:(2)构造该正规式的装换系统:由转换系统构造确定有穷自动机对状态重命名:DFA的状态转换图:3-2 对下面的FA,将它确定化并最小化。

a解:由转换系统构造确定有穷自动机对状态重命名:DFA的状态转换图:最小化:初始划分={T0,T1,T2}{T0,T1,T2}a={T, Φ, Φ},所以划分为({ T},{Φ, Φ})即{T}3-3 给出下述文法所对应的正规式:S →0A|1BA→1S|1B→0S|0解:S→0A→01S→0A→01S→010A→0101S→0101OA→0101O1S…S→1B→10S→1B→10S→101B→1010S→10101B→101010S…所以可得正规式=(01|10)(01|10)*3-4 构造下述文法G[S]的自动机:S→A0S→A0|S1|0该自动机是确定的吗?若不确定,则对它确定化。

该自动机可识别的语言是什么?解:文法转换为自动机:因为是左线性文法,要增加一个开始状态X,并将开始符号S看成终态。

因为A经0可达到不同的状态,所以,该自动机为NFA。

确定化:对状态重命名:该自动机表达的语言用正规式表示为:00(0|10)*3-5试用有限自动机理论证明下列正规表达式是等价的。

(1)(a|ba)*b(2)(a*ba)*a*b解:(1)(2)因为最小化后,两者的状态图是一样的,都为:所以正规式(a|ba)*b和正规式(a*ba)*a*b是等价的。

编译原理作业参考答案

编译原理作业参考答案
(2)
最左推导:NNDDD3D34
NNDNDDDDD5DD56D568
最右推导:NNDN4D434
NNDN8ND8N68D68568
2*.写出一个文法,使其语言是奇数集,且每个奇数是不以0开头。
答:
SCAB|B(考虑了正负号)
A1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | AA | A0 |
低级语言:机器语言和汇编语言。
高级语言:是人们根据描述实际问题的需要而设计的一个记号系统。如同自然语言(接近数学语言和工程语言)一样,语言的基本单位是语句,由符号组和一组用来组织它们成为有确定意义的组合规则。
翻译程序:能够把某一种语言程序(源语言程序)改变成另一种语言程序(目
标语言程序),后者与前者在逻辑上是等价的。其中包括:编译程序,解释程序,汇编程序。
{2,4}a = {1,0},{2,4}b = {3,5},无需划分
{3,5}a = {3,5},{3,5}b = {2,4},无需划分
{0,1}a = {1},{0,1}b = {2,4},无需划分
因此,最终的划分为:{0,1}、{2,4}和{3,5},化简后的结果:
5.(P65,14)构造一个DFA M,它接受={0,1}上所有满足如下条件的字符串:每个1都有0直接跟在右边。
T*(i+i)F*(i+i)i*(i+i)
⑵构造语法树
E最左推导构造语法树
E + T
E + T i
T i
i
3.(P36, 9)证明下面的文法是二义的:
SiSeS | iSi
答:对于句子iiiei有两棵不同的语法树。因此该文法是二义的。
SiSeSiiSeSiiieSiiiei

《编译原理》习题解答

《编译原理》习题解答

《编译原理》习题解答:第一次作业: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、为什么要对单词进行内部编码?其原则是什么?对标识符是如何进行内部编码的?答:内部编码从“源字符串”中识别单词并确定单词的类型和值;原则:长度统一,即刻画了单词本身,也刻画了它所具有的属性,以供其它部分分析使用。

对于标识符编码,先判断出该单词是标识符,然后在类别编码中写入相关信息,以表示为标识符,再根据具体标识符的含义编码该单词的值。

编译原理课后习题答案

编译原理课后习题答案

编译原理课后习题答案编译原理习题答案习题11.1翻译程序:把⽤某种程序设计语⾔(源语⾔)编写的程序(源程序)翻译成与之等价的另⼀种语⾔(⽬标语⾔)的程序(⽬标程序)。

编译程序:⼀种翻译程序,将⾼级语⾔编写的源程序翻译成等价的机器语⾔或汇编语⾔的⽬标程序。

1.2词法分析、语法分析、语义分析和中间代码⽣成、代码优化、⽬标代码⽣成1.3词法分析:根据语⾔的词法规则对构成源程序的符号进⾏扫描和分解,识别出⼀个个的单词。

语法分析:根据语⾔的语法规则,把单词符号串分解成各类语法单位。

语义分析及中间代码⽣成:对语法分析识别出的语法单位分析其含义,并进⾏初步翻译。

代码优化:对中间代码进⾏加⼯变换,以产⽣更⾼效的⽬标代码。

⽬标代码⽣成:将中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或会变指令代码。

以上5个阶段依次执⾏。

习题22.1 (1)有穷⾮空的符号集合(2)利⽤产⽣是规则A->v将A替换为v时与A的上下⽂⽆关。

(3)略(4)推导是把句型中的⾮终结符⽤⼀个产⽣是规则的右部开替代的过程;直接推导是将⾮终结符的替代结果只⽤了⼀次产⽣式规则。

(5)略(6)⼀个句型的最左直接短语(7)如果⼀个⽂法存在某个句⼦对应两棵不同的语法树或有两个不同的最左(右)推导,则称这个⽂法是⼆义的。

2.2(1)VN ={Z,A,B} VT ={a,b,c,d,e}(2)abbcde,abbbcde是,acde不是。

2.3 (1)L[G]={d|n≥1,m≥0}(2)2.4 (1) A=>B=>c=>fAg=>fBg=>fCg=>feg(2)A=>AaB=>AaC=>Aae=>Bae=>BcCae=>Bceae=>Cceae=>eceae(3)A=>B=>BcC=>BcfAg=>BcfAaBg=>BcfAaCg=>BcfAaeg=>BcfBaeg =>BcfCaeg=>Bcfeaeg=>Ccfeaeg=>ecfeaeg(3)中题⽬有错应为C fCg|e2.5L[G]={a?b?c?|aab,n≥2}2.6 (1)Z→AB A→Aa|ε B→Bb|ε(2)Z→aZb|ab(3)Z→aAb A→aAb|b(4)Z→AB A→aAb|ab B→cB|ε(5)Z→aaAb|ab Z→aaBb|bb A→aaAb|ab B→aaBb|bb2.7 ⼀位数:Z→2|4|6|8两位数:Z→AB A→1|2|3|4|5|6|7|8|9 B→0|2|4|6|8三位以上:Z→ACB A→1|2|3|4|5|6|7|8|9 B→0|2|4|6|8 C→CDD→0|1|2|3|4|5|6|7|8|92.8证明:E=>E+T=>E+T*F短语:T*F E+T*F 直接短语:T*F 句柄:T*F2.9 语法树: E 短语:E*T , (E*T) , F↑(E*T) ,F ,E* F↑(E*T)E *F 直接短语:E*T , FT ↑ F 句柄:FF ( E )E * T2.10(1)语法树(2)直接短语:a , ZZ 句柄:Z( L )L , ZZ ( L )Za2.11最左推导:Z=>ZaB=>BaB=>B+AaB=>A+AaB=>(+)Z*aB=>(+)ZaB*aB =>(+)+aB*aB=>(+)+aA*aB=>(+)+a(*aB=>(+)+a(*aA=>(+)+a(*a(直接短语:(,+句柄:(2.12(1) S=>iSeS=>iiSeS=>iiIeS=>iiIeIS=>iS=>iiSeS=>iiIeS=>iiIeI(2) S=>SaS=>cSaS=>cfaS=>cfafS=>cS=>cSaS=>cfaS=>cfaf(3) E=>EOE=>EOEOE=>iOEOE=>i+EOE=>i+iOE=>i+i-E=>i+i-iE=>EOE=>iOE=>i+E=>i+EOE=>i+iOE=>i+i-E=>i+i-i2.13 Z→aABZ|cCACdA→bAB|aZA|cCCB→bAB|CzbC→cZ|c习题33.1(1)确定的有限⾃动机(2)不确定的有限⾃动机(3)正规集是⼀类特殊的单词集合,正规式是正规集的描述⼯具 3.2 (1) (1|2|3|4|5|6|7|8|9|0)*(1|3|5|7|9) (2) 11(0|1)*00 3.3 证明:b *(a|b)+={a,b,ab,ba,aa,bb …} (a|b)+={a,b,ab,ba,aa,bb …} 3.4 (1)(2)DDDD3.5(1) (2)(3)3.6(1) (01|10) *(01|10)(2) (0(1|00)*)|003.7(1) Z →1AB (2)Z →ABA →(0|1)A A →0A|εA →0|1B →(0|1)B|ε B →0B B →ε3.8 r=a(a|b )*bb3.9 Z →1BB →0Z|0 Z →0Z|ε3.10 3.11DDD习题44.1 (1)若⽂法G[Z]满⾜①⽂法不含左递归②③(2)4.2(1) First(S)={a,d} First(B)={a,d,c,ε}First(A)={a,d,e,c} First(D)={a,d,ε}Follow(S)={#,a,b,d,e} Follow(B)={a,d}Follow(A)={b} Follow(D)={e,a,d,b}(2) 不是4.3 (1) 证明: First(Z)={a,b,c} Follow(S)={#,a,b,c,d} First(A)={a,b,c,d} Follow(A)={ #,a,b,c,d }First(B)={a,d,c} Follow(B)={ a,b,c,d } 是LL(1)⽂法。

编译原理课后答案 (3)

编译原理课后答案 (3)

编译原理课后答案问题一计算机程序的执行是一个多阶段的过程,其中编译是其中的一环。

请问编译的三个主要阶段分别是什么?答:编译过程一般可以分为三个主要阶段,分别是词法分析、语法分析和代码生成。

下面分别对这三个阶段进行介绍。

1. 词法分析词法分析是编译过程的第一步,也是最基础的一步。

它的任务是将源代码中的字符序列分解成一个个具有独立含义的单词,这些单词被称为“记号”或“词法单元”。

词法分析器根据程序中每一个字符的组合规则,将其转化为一个个词法单元,并记录下词法单元的类型标记。

词法分析器的工作一般通过有限状态自动机来实现,它根据一定的词法规则进行扫描和分析。

2. 语法分析语法分析是编译过程的第二步,它接收词法分析器生成的词法单元流,根据语法规则进行分析,并生成一棵语法树。

语法分析的主要任务是确定输入程序的结构,检查程序的语法正确性,并生成用于后续处理的输入形式。

语法分析器一般采用的是自顶向下或自底向上的分析方法,常用的方法有递归下降法和LR(1)分析法。

3. 代码生成代码生成是编译过程的最后一步,它将语法分析生成的语法树转化为目标机器的可执行代码。

代码生成器通过遍历语法树,将每个语法树节点转化为相应的目标机器代码。

代码生成过程中需要考虑到目标机器的特性和限制,以及优化代码的效率和性能。

问题二请解释一下编译原理中的词法规则是什么?答:编译原理中的词法规则指的是一组规定词法单元模式的规则。

它描述了如何将输入字符序列转换为词法单元,并为每个词法单元定义了一个标记。

词法规则一般使用正则表达式来描述词法单元的模式。

编译器根据词法规则构建词法分析器,用于将源代码分割成一系列的词法单元。

词法规则的灵活性和准确性对编译过程的性能和结果都有较大的影响。

一个完整的词法规则一般包含以下几个部分:1.正则表达式:描述了词法单元的模式,使用特定的正则表达式语法来表示。

2.动作:描述了当词法单元匹配到模式时,需要执行的动作或处理过程。

编译原理作业参考答案

编译原理作业参考答案

编译原理作业参考答案作业一一、是非题1.(×)2.(×)3.(×)4.(×)5.(×)6.(√)7. (√)8.(√)9.(√) 10.(×) 11.(√) 12.(√) 13.(√)二、填空题1.(词法分析),(语法分析),(中间代码生成),(代码优化),(目标代码生成)2.(单词符号),(语法单位)。

3.(源程序),(单词符号)4.(语法),(语义)5. (词法分析)、(语法分析)、(语义分析),(中间代码产生),(代码优化),(目标代码生成)6.(解释方式)7. (语法规则)8. (上下文无关文法)9. (自上而下分析法),(自下而上分析法)10. (规范推导)11. (最左归约)三、名词解释题:1.词法分析器-----执行词法分析的程序。

2. 自编译方式------先对语言的核心部分构造一个小小的编译程序,再以它为工具构造一个能够编译更多语言成分的较大编译程序。

如此扩展下去,就像滚雪球一样,越滚越大,最后形成人们所期待的整个编译程序。

3. 遍-----所谓“遍”就是对源程序或中间结果长头到尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序。

4. 编译程序-----一种翻译程序: 能够把某一种语言程序(称为源语言程序)转换成另一种语言(成为目标程序),而后着与前者在逻辑上是等价的。

5. 超前搜索-----所谓超前搜索是在词法分析过程中,有时为了确定词性,需超前扫描若干个字符。

6. 短语------令G是一个文法,S划文法的开始符号,假定αβδ是文法G的一个句型,如果有SαAδ且Aβ,则称β是句型αβδ相对非终结符A的短语。

7. 规范句型------由规范推导所得到的句型。

8. 句柄------一个句型的最左直接短语。

9. -规范推导-----最右推导又称为规范推导。

四、简答题:1. 正规式a ( a | b )*。

2.(a*b|b*a)={a,b,ab,ba,aab,bba……}3.状态转换图是一张有限方向图。

(完整版)编译原理习题及答案(整理后)

(完整版)编译原理习题及答案(整理后)

8、规范推导是最左推导,故选 d。
9、由 T→T,…和 T→(… 得 FIRSTVT(T))={(,,)};
由 T→S 得 FIRSTVT(S)⊂FIRSTVT(T),而 FIRSTVT(S)={b,∧,(};即
FIRSTVT(T)={b,∧,(,,};
因此选 c。
10、d 11、c 12、b 13、b 14、b
标语言
第二章
一、单项选择题
1、文法 G:S→xSx|y 所识别的语言是 。
a. xyx
b. (xyx)* c. xnyxn(n≥0) d. x*yx*
2、文法 G 描述的语言 L(G)是指 。
a. L(G)={α|S⇒+ α , α∈VT*}
b. L(G)={α|S⇒* α, α∈VT*}
c. L(G)={α|S⇒* α,α∈(VT∪VN*)} d. L(G)={α|S⇒+ α, α∈(VT∪VN*)}
6、一个文法所有句型的集合形成该文法所能接受的语言。
五、简答题
1、句柄 2、素短语
3、语法树
4、归约
六、问答题
1、给出上下文无关文法的定义。
2、文法 G[S]:
() () () () ()
5、推导
S→aSPQ|abQ
QP→PQ
bP→bb
bQ→bc
cQ→cc (1)它是 Chomsky 哪一型文法? (2)它生成的语言是什么? 3、按指定类型,给出语言的文法。 L={aibj|j>i≥1}的上下文无关文法。 4、有文法 G:S→aAcB|Bd
a. 23 B. 42 c. 30 14、规范归约指 。
d. 17
a. 最左推导的逆过程
b. 最右推导的逆过程

编译原理作业答案完全正确中南大学在线测试

编译原理作业答案完全正确中南大学在线测试
(D)
没有详解信息!
(二) 多选题
1. 语法分析方法可分为( )。
(A) 自左向右分析法 (B) 自右向左分析法 (C) 自上而下分析法 (D) 自下而上分析法
参考答案:
(CD)
没有详解信息!
2. 编译前端主要由与源语言有关但与目标机无关的那些部分组成,这些部分通常包括( )。
(B)
没有详解信息!
12. 已知文法G[S] S→S*aF | aF | *aF F→+aF | +a 消除文法左递归和提公共左因子后的文法为( )。
(A) S→aFS’ | *aFS’ S’→*aFS’ | ε F→+aF’ F’→F |ε
(B) S→aFS’ | *aFS’ S’→ ε F→+aF’ F’→F |ε
参考答案:
(ABCD)
没有详解信息!
4. 对于文法G[S] S→aPS’ | *aPS’ S’→*aPS’ | ε P→+aP’ P’→P | ε FOLLOW(P’)中包含的符号有 。
(A) *'
(B) a'
(C) ='
(D) +'
参考答案:
(AC)
没有详解信息!
5. 对于文法G[S] S→aPS’ | *aPS’ S’→*aPS’ | ε P→+aP’ P’→P | ε FIRST(S)中包含的符号有( )。
(A) +'
(B) a'
(C) ε'
(D) *'
参考答案:
(一) 单选题
1. 扫描器的任务是从源程序中识别出一个个( )。

中南大学《编译原理》课程作业(在线作业)二及参考答案

中南大学《编译原理》课程作业(在线作业)二及参考答案

(一) 单选题1. 已知文法G[S]及相应翻译方案S→aAb {print “1”} S→a {print “2”} A→AS{print “3”} A→c {print “4”} 输入acab,输出是()。

(A)4231 (B) 3214 (C) 1234 (D) 3421参考答案:(A)2.a:=(b+c)*e+(b+c)/f的逆波兰式是()。

(A)abc*e+bc+f/+:=(B)abc+e*bc+f/+:=(C)abc+e*b+c+f/:=(D)abc+eb*c+f/+:=参考答案:(B)3. 规范归约也称为()。

(A)最上归约(B) 最左归约(C) 最下归约(D) 最右归约参考答案:(B)4. 规范归约使用进行()归约。

(A)句柄(B) 最左素短语(C) 最右素短语(D) 素短语参考答案:(A)5. 素短语是指这样一个短语,()含有一个终结符,并且,除它自身外不再含任何更小的素短语。

(A)至多(B) 只(C) 至少(D) 不参考答案:(C)6. 表达式(a+b)*(c+d)后缀式为()。

(A)abcd++*(B)abcd*++(C)ab*cd++(D)ab+cd+*参考答案:(D)7. 在语法树中,一个结点的继承属性由此结点的父结点和/或兄弟结点的某些属性确定称为()。

(A)继承属性(B)一致属性(C)原子属性(D)综合属性参考答案:(A)8. 在形式语言中,()常被称为规范推导。

(A)最上推导(B) 最左推导(C) 最下推导(D) 最右推导参考答案:(D)9. 自下而上分析的中心问题是()。

(A)判断栈中符号可约性,以及如何归约(B) 判断栈底符号可约性,以及如何归约(C) 判断栈顶符号可约性,以及如何归约(D) 判断栈外符号可约性,以及如何归约参考答案:(C)10. 属性文法的属性分为()两类。

(A)综合属性和继承属性(B)一致属性和继承属性(C)原子属性和继承属性(D)综合属性和传递属性参考答案:(A)11. 对于文法的每个产生式都配备了一组属性的计算规则,称为()。

(完整版)编译原理课后习题答案

(完整版)编译原理课后习题答案

(完整版)编译原理课后习题答案第一章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?7 5431N?ND?NDD?NDDD?NDDDD?DDDDD?7DDDD?75DDD?754 DD?7543D?75431 4. 证明文法S→iSeS|iS| i是二义性文法。

答:对于句型iiSeS存在两个不同的最左推导:S?iSeS?iiSesS?iS?iiSeS所以该文法是二义性文法。

编译原理习题及答案1~3

编译原理习题及答案1~3
D.高级语言接近人们的自然语言,但其依赖具 体机器的特性是无法改变的
2021/10/10
2
《遍”是为了 。
A.提高程序的执行效率
B.使程序的结构更加清晰
C.利用有限的机器内存并提高机器的执行效率
D.利用有限的机器内存但降低了机器的执行效

(3) 构造编译程序应掌握 。
表2-1 状态转换矩阵
I
Ia
Ib
{x}
{x,y}
{y}
{y}

{x,y}
{x,y}
{x,y}
{x,y}
将转换矩阵中的所有子集重新命名,形成表2-2所 示的状态转换矩阵,即得到
S
a
b
0
2
1
1

2
2
2
2
2021/10/10
21
《编译原理教程》习题解析
22
其状态转换图如图2-3所示。
图2-3 习题2.3的DFA M′
(8) 由于正则闭包R+=R*R=RR*,故 (a|b)*(a|b)=(a|b)(a|b)*。故选A。
2021/10/10
17
《编译原理教程》习题解析
18
2.2 什么是扫描器?扫描器的功能是什么? 【解答】 扫描器就是词法分析器,它接受输 入的源程序,对源程序进行词法分析并识别出一 个个单词符号,其输出结果是单词符号,供语法 分析器使用。通常把词法分析器作为一个子程序, 每当语法分析器需要一个单词符号时就调用这个 子程序。每次调用时,词法分析器就从输入串中 识别出一个单词符号交给语法分析器。
4
《编译原理教程》习题解析
5
【解答】 (1) 编译程序可以将用高级语言编写的源程序转换成 与之在逻辑上等价的目标程序,而目标程序可以是汇编语 言程序或机器语言程序。故选A。 (2) 分多遍完成编译过程可使整个编译程序的逻辑结 构更加清晰。故选B。 (3) 构造编译程序应掌握源程序、目标语言和编译方 法这三方面内容。故选D。

编译原理课后作业参考答案

编译原理课后作业参考答案

作业参考答案第二章 高级语言及其语法描述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=>568 7、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 有两棵不同语法分析树,如下所示,因此该文法是二义的。

中南大学远程编译原理复习题及参考答案

中南大学远程编译原理复习题及参考答案

中南大学远程编译原理复习题及参考答案中南大学网络教育课程考试复习题及参考答案编制原则一、判断题:一.上下文无关语法的起始字符可以是终止符或非终止符。

()2. 句型的直接短语是独一无二的。

()3. 事实证明,语法的歧义是可判定的。

()4. 每个基本块都可以用DAG表示。

()5. 每个进程的活动记录量可以在编译时静态确定。

()类型6.2语法必须是类型3语法。

()7. 句型必须是一个句子。

()8. 操作员优先分析每次都会减少手柄。

()9. 在使用三进制实现三地址码时,不利于优化中间码。

()10. 在编译过程中,解析器的任务是分析单词是如何形成的。

()11. 优先级表必须具有相应的优先级函数。

()12. 在生成目标代码时,应考虑如何充分利用计算机寄存器。

()13. 递归下降分析是一种自下而上的分析。

()14. 并不是所有的语法都可以改写成LL(1)语法。

()15. 每个基本街区只有一个入口和一个出口。

()16. LL(1)语法必须明确无误。

()17. 用逆波兰法表示的表达式也称为前缀。

()18. 在生成目标代码时,应考虑如何充分利用计算机寄存器。

()19. 正常语法产生的语言可以用上下文无关语法来描述。

()20. 优先级表必须具有相应的优先级函数。

()类型21.3语法必须是类型2语法。

()22. 如果一个语法有一个对应于两个不同语法树的句子,则该语法是不明确的。

(二)填空:1.()称为规范推导。

2.编译过程可分为五个阶段()、()、()和()。

3.如果一个语法有一个对应于两个不同语法树的句子,则称之为()。

4.就功能而言,程序语言的语句可分为()语句和()语句。

5.解析器的输入为(),输出为()。

6.扫描仪的任务是从()中识别一个()。

7.符号表中的信息栏中登记了每个名字的有关的性质,如()等等。

8.一个过程相应的display表的内容为()。

9.一个句型的最左直接短语称为句型的()。

10.两种常用的动态存储分配方法是()动态分配和()动态分配。

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

(一) 单选题1. 为了管理过程在一次执行中所需要的信息,使用一个连续的存储区来管理,这个区(块) 叫做一个()。

(A)结构体记录(B) 数组记录(C) 管理信息记录(D) 活动记录参考答案:(D)2. 考虑下面的程序:… procedure p(x, y, z); begin x:=x+y; z:=z*z; end beginA:=2; B:=A*2; P(A, B, B); Print A, B end. 若参数传递的方式采用传地址时,程序执行后输出 A, B的值是()。

(A)A=4,B=14(B) A=4,B=16(C) A=6,B=14(D) A=6,B=16参考答案:(D)3. 在运行存储空间的划分中有一个单独的区域叫做堆,留给存放()。

(A)局部数据(B) 静态数据(C) 全局数据(D) 动态数据参考答案:(D)4. 所谓得结果就是每个形式参数对应两个单元,第一个单元存放实参的地址,第二个单元存放实参的值。

在过程体中对形参的任何引用或赋值都被处理成对第二个形式单元的(),但在过程工作完成返回之前必须把第二个单元的内容存放到第一个单元所指的那个实参单元之中。

(A)间接访问(B) 指针访问(C) 直接访问(D) 间接的间接访问参考答案:(C)5. 一个过程相应的DISPLAY表的内容为()。

(A)现行活动记录地址(B) 现行活动记录地址和所有外层最新活动记录的地址传递规则(C) 所有外层最新活动记录的地址(D) 以上都不对参考答案:(B)6. 以下程序 (1) J:=1 (2) A:=0 (3) R:=I-1 (4) C:=B+J (5) A:=C*A (6) if J=20 goto(9) (7) J:=J+1 (8) goto (3) (9) 可划出()个基本块。

(A)4(B) 3(C) 2(D) 5参考答案:(A)7. 通过DISPLAY表访问非局部变量和比沿着静态链访问非局部变量()。

(A)速度要慢(B) 容易(C) 速度要快(D) 不容易参考答案:(C)8. 对于数据空间的存贮分配,FORTRAN采用()策略。

(A)动态存贮分配(B) 栈式存贮分配(C) 堆式存贮分配(D) 静态存贮分配参考答案:(D)9. 每条指令的执行代价定义为()。

(A)指令访问主存次数(B) 指令访问主存次数加1(C) 指令访问主存次数加2(D) 指令访问主存次数加3参考答案:(B)10. 如果在一个基本块中,四元式i对A定值,四元式j要引用A值,而从i到j之间没有A的其它定值,则称j是四元式i的变量A的()。

(A)待用信息(B) 已用信息(C) 使用信息(D) 必用信息参考答案:(A)11. 在基本块范围的优化称为()。

(A)循环优化(B) 全局优化(C) 局部优化(D) 基本块优化参考答案:(C)12. 变量和形参运行时在栈上的绝对地址是()。

(A)栈顶地址+相对地址(B) 栈顶地址+相对地址(C) 活动记录基地址+相对地址(D) 栈底地址+相对地址参考答案:(C)13. 常用的两种动态存贮分配办法是()。

(A)栈式和堆式动态分配(B) 栈式和队列式动态分配(C) 链式和堆式动态分配(D) 队列式和堆式动态分配参考答案:(A)14. 所谓传名就是在进入调用段之前不对实在参数预先进行计值,而是过程中每当使用到相应的形参时才对它实行计值。

因此,在实现时通常都把实参处理成()。

(A)子程序(B) 变量(C) 指针(D) 常量参考答案:(A)15. 考虑下面的程序:… procedure p(x, y, z); begin y:=y+z; z:=y*z+x end; begina:=2; b:=3; p(a+b, b, a); print a end. 若参数传递的方式采用传名时,程序执行后输出 a的值是。

(A)16(B) 17(C) 18(D) 19参考答案:(B)16. 记录过程的各外层过程的最新活动记录的起始地址的表称为()。

(A)静态表(B) 起始地址表(C) 活动记录表(D) DISPLAY表参考答案:(D)17. 每个过程的活动记录的体积在编译时()。

(A)静态确定(B) 动态确定(C) 不能确定(D) 不能计算参考答案:(A)18. 根据优化所涉及的程序范围,可将优化分成为()级别。

(A)4(B) 3(C) 2(D) 5参考答案:(B)19. 对程序进行各种等价变换,使得从变换后的程序出发,生成更有效的目标代码称为()。

(A)变换(B) 优化(C) 编译(D) 解释参考答案:(B)20. 使用指针指向直接外层的最新活动记录的地址,从而形成一条链,称为()。

(A)动态链(B) 已用信息(C) 静态链(D) 必用信息参考答案:(C)(二) 多选题1. 活动记录一般包含内容有()。

(A)临时单元、内情向量、局部变量、形式单元(B) 动态链(C) 静态链(D) 返回地址参考答案:(ABCD)2. 求基本块入口语句是()。

(A)循环的第一个语句(B) 程序的第一个语句(C) 条件转移或无条件转移转移到的语句(D) 紧跟在条件转移语句后面的语句参考答案:(BCD)3. 常用的两种动态存贮分配办法有()。

(A)链式动态分配(B) 堆式动态分配(C) 队列式动态分配(D) 栈式动态分配参考答案:(BD)4. 一个过程相应的DISPLAY表的内容有()。

(A)所有活动记录地址(B) 所有外层活动记录的地址(C) 现行活动记录地址(D) 所有外层最新活动记录的地址参考答案:(CD)5. 对于静态链,C和PASCAL语言()。

(A)需要(B) 不需要(C) 可以不使用,但要用其他方法打通代替(D) 无关参考答案:(AC)6. 根据优化所涉及的程序范围,可将优化分成为()。

(A)基本块优化(B) 局部优化(C) 循环优化(D) 全局优化参考答案:(BCD)7. FORTRAN语言使用静态分配策略。

FORTRAN语言()。

(A)不允许过程递归(B) 每个数据名所需存储空间都是常量(C) 允许过程递归(D) 所有数据名的性质是完全确定的参考答案:(ABD)8. 对代码进行等价变换必须遵循一定的原则是()。

(A)等价原则(B) 一致原则(C) 有效原则(D) 合算原则参考答案:(ACD)9. 编译程序为了组织存储空间,必须考虑的问题有()。

(A)过程是否允许递归(B) 过程是否允许引用非局部名称(C) 过程调用时如何传递参数(D) 存储空间可否动态分配参考答案:(ABCD)10. 代码生成要考虑的主要问题有()。

(A)减少目标中代码访问访问主存单元的次数(B) 发现语法错误(C) 使生成的目标代码较短(D) 检查程序一致性参考答案:(AC)11. 优化技术有()。

(A)删除公共子表达式、无用代码、归纳变量(B) 复写传播(C) 强度削弱(D) 代码外提参考答案:(ABCD)12. 在允许过程嵌套程序语言,一个过程可以引用包围它的任一外层过程所定义的标识符,对非局部量的引用(存取)方法有()。

(A)静态链(B) 动态链(C) DISPLAY表(D) 指针链参考答案:(AC)13. 采用简单的栈式存储分配的语言()。

(A)过程定义不允许嵌套(B) 允许过程的递归调用(C) 过程定义允许嵌套(D) 不允许过程的递归调用参考答案:(AB)14. 常用的参数传递方式有()。

(A)传地址(B) 传值(C) 传名(D) 传过程参考答案:(ABC)15. 目标代码一般有以下()形式。

(A)能够立即执行的机器语言代码(B) C语言代码(C) 待装配的机器语言模块(D) 汇编语言代码参考答案:(ACD)16. 假设过程R的外层为Q,Q的外层为P,则过程R运行时DISPLAY表的内容有()。

(A)R的现行活动记录地址(B) Q的最新活动记录的地址(C) P的最新活动记录的地址(D) 程序的活动记录地址参考答案:(ABC)17. 形成DISPLAY 的方法是()。

(A)程序的基地址(B)当过程层次为n,DISPLAY表为n+1个值(C) 一个过程被调用时,从调用过程的DISPLAY表中自下向上抄录n个SP值,再加上层的SP值。

(D)全局DISPLAY地址参考答案:(BCD)18. 代码化化()。

(A)只能在中间代码进行(B) 可以在中间代码进行(C) 只能在目标代码上进行(D) 可以在目标代码上进行参考答案:(BD)19. 在一个基本块内,可以进行删除公共子表达式和删除无用赋值两种优化,还可以实现下面的变换技术有()。

(A)合并已知量(B) 临时变量改名(C) 交换语句的位置(D) 代数变换参考答案:(ABCD)20. 对于下面程序 program main(input, output); procedure p(x, y, z); beginy:=y+1; z:=z+x; end begin a:=2; b:=3; p(a+b, a, a); print a end 参数传递采用方式,程序执行后输出 a的正确值是()。

(A)传值:2(B) 传地址:6(C) 得结果:7(D) 传名:9参考答案:(ACD)(三) 判断题1. 使用静态链访问非局部变量比DISPLAY表速度快。

( )(A)对(B) 错参考答案:(B)2. 每个过程的活动记录的体积在编译时可静态确定。

()(A)对(B) 错参考答案:(A)3. 静态链指向静态直接外层最新活动记录的地址的指针,用来访问局部数据。

( )(A)对(B) 错参考答案:(B)4. 一个过程的活动指的是该过程的一次执行。

( )(A)对(B) 错参考答案:(A)5. 为了生成更有效的目标代码,要考虑基本块中中间代码序列。

( )(A)对(B) 错参考答案:(A)6. 每条指令的执行代价=每条指令访问主存单元次数。

( )(A)对(B) 错参考答案:(B)7. 每个基本块只有一个入口和一个出口。

( )(A)对(B) 错参考答案:(A)8. 动态链是指向调用该过程前的最新活动记录的地址的指针。

( )(A)对(B) 错参考答案:(A)9. 目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。

( )(A)对(B) 错参考答案:(A)10. DISPLAY表不是跟踪每个外层过程的最新活动记录的位置的方法。

( )(A)对(B) 错参考答案:(B)11. FORTRAN语言采用栈式动态分配策略。

( )(A)对(B) 错参考答案:(B)12. 用运算时间短的运算符替换运算时间长的运算符,这种变换称为强度削弱。

( )(A)对(B) 错参考答案:(A)13. 每个基本块可用一个DAG表示。

()(A)对(B) 错参考答案:(A)14. 代码化化可以在中间代码和目标代码上进行优化。

相关文档
最新文档