东南大学编译原理期末复习
(完整版)编译原理复习题
(完整版)编译原理复习题《编译原理》常见题型一、填空题1、编译程序的工作过程一般可以划分为词法分析,语法分析,语义分析,中间代码生成,目标代码生成等几个基本阶段。
2、若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序。
3、编译方式与解释方式的根本区别在于是否生成目标代码。
5、对编译程序而言,输入数据是源程序,输出结果是目标程序。
7、若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序。
8、一个典型的编译程序中,不仅包括词法分析、语法分析、中间代码生成、代码优化、目标代码生成等五个部分,还应包括表格处理和出错处理。
其中,词法分析器用于识别单词。
10、一个上下文无关文法所含四个组成部分是一组终结符号、一组非终结符号、一个开始符号、一组产生式。
12、产生式是用于定义语法成分的一种书写规则。
13、设G[S]是给定文法,则由文法G所定义的语言L(G)可描述为L(G)={x│S*x,x∈V T*} 。
14、设G是一个给定的文法,S是文法的开始符号,如果S*x(其中x∈V*),则称x是文法的一个句型。
15、设G是一个给定的文法,S是文法的开始符号,如果S*x (其中x∈V T*),则称x是文法的一个句子。
16、扫描器的任务是从源程序中识别出一个个单词符号。
17、语法分析最常用的两类方法是自上而下和自下而上分析法。
18、语法分析的任务是识别给定的终结符串是否为给定文法的句子。
19、递归下降法不允许任一非终结符是直接左递归的。
20、自顶向下的语法分析方法的关键是如何选择候选式的问题。
21、递归下降分析法是自顶向下分析方法。
22、自顶向下的语法分析方法的基本思想是:从文法的开始符号开始,根据给定的输入串并按照文法的产生式一步一步的向下进行直接推导,试图推导出文法的句子,使之与给定的输入串匹配。
23、自底向上的语法分析方法的基本思想是:从给定的终结符串开始,根据文法的规则一步一步的向上进行直接归约,试图归约到文法的开始符号。
完整word版,编译原理期末试题(8套含答案+大题集),推荐文档
《编译原理》期末试题(一)一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)1.编译程序是对高级语言程序的解释执行。
(× )2.一个有限状态自动机中,有且仅有一个唯一的终态。
(×)3.一个算符优先文法可能不存在算符优先函数与之对应。
(√ )4.语法分析时必须先消除文法中的左递归。
(×)5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。
(√)6.逆波兰表示法表示表达式时无须使用括号。
(√ )7.静态数组的存储空间可以在编译时确定。
(×)8.进行代码优化时应着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用。
(×) 9.两个正规集相等的必要条件是他们对应的正规式等价。
(× )10.一个语义子程序描述了一个文法所对应的翻译工作。
(×)二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分) 1.词法分析器的输出结果是_____。
A.( ) 单词的种别编码B.( ) 单词在符号表中的位置C.( ) 单词的种别编码和自身值D.( ) 单词自身值2.正规式M 1 和M 2 等价是指_____。
A.( ) M1和M2的状态数相等B.( ) M1和M2的有向边条数相等C.( ) M1和M2所识别的语言集相等D.( ) M1和M2状态数和有向边条数相等3.文法G:S→xSx|y所识别的语言是_____。
A.( ) xyx B.( ) (xyx)* C.( ) xnyxn(n≥0) D.( ) x*yx*4.如果文法G是无二义的,则它的任何句子α_____。
A.( )最左推导和最右推导对应的语法树必定相同B.( ) 最左推导和最右推导对应的语法树可能不同C.( ) 最左推导和最右推导必定相同D.( )可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握______。
编译原理第三版期末复习
期末复习总结《编译原理》第一章:绪论一、填空问题①由于计算机只能认识机器语言,所以需要翻译程序将高级语言翻译成计算机可以识别的机器语言。
②编译程序的工作过程一般主要划分为词法分析,语法分析,中间代码生成,代码优化,目标代码生成等几个基本阶段,同时还会伴有表格管理和出错处理。
③如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两个阶段:编译阶段和运行阶段。
如果编译程序生成的目标程序是汇编语言的程序,则源程序的执行分为三个阶段:编译阶段,汇编阶段和运行阶段。
1-02.若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序 ,则其翻译程序称为编译程序.1-03.编译方式与解释方式的根本区别在于是否生成目标代码 .1-05.对编译程序而言,输入数据是源程序,输出结果是目标程序 .1-10.一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括(1)c.其中, (2)b 和代码优化部分不是每个编译程序都必需的. 词法分析器用于识别 (3)c ,语法分析器则可以发现源程序中的 (4)d .(1) a.模拟执行器 b.解释器 c.表格处理和出错处理 d.符号执行器(2) a.语法分析 b.中间代码生成 c.词法分析 d.目标代码生成(3) a.字符串 b.语句 c.单词 d.标识符(4) a.语义错误 b.语法和语义错误 c.错误并校正 d.语法错误1-11.程序语言的语言处理程序是一种 (1)a . (2)b 是两类程序语言处理程序,他们的主要区别在于 (3)d .(1) a.系统软件 b.应用软件 c.实时系统 d.分布式系统(2) a.高级语言程序和低级语言程序 b.解释程序和编译程序c.编译程序和操作系统d.系统程序和应用程序(3) a.单用户与多用户的差别 b.对用户程序的查错能力c.机器执行效率d.是否生成目标代码1-12.汇编程序是将 a 翻译成 b ,编译程序是将 c 翻译成 d .a.汇编语言程序b.机器语言程序c.高级语言程序d. a 或者 be. a 或者 cf. b 或者 c1-13.下面关于解释程序的描述正确的是 b .(1) 解释程序的特点是处理程序时不产生目标代码(2) 解释程序适用于COBOL 和 FORTRAN 语言(3) 解释程序是为打开编译程序技术的僵局而开发的a. (1)(2)b. (1)c. (1)(2)(3)d.(2)(3)1-14.高级语言的语言处理程序分为解释程序和编译程序两种.编译程序有五个阶段,而解释程序通常缺少 (1)e 和 (1)b .其中, (1)e 的目的是使最后阶段产生的目标代码更为高效.与编译系统相比,解释系统 (2)d .解释程序处理语言时,大多数采用的是 (3)b 方法.(1): a. 中间代码生成 b.目标代码生成 c.词法分析 d.语法分析 e.代码优化(2): a.比较简单,可移植性好,执行速度快b.比较复杂,可移植性好,执行速度快c.比较简单,可移植性差,执行速度慢d.比较简单,可移植性好,执行速度慢(3): a.源程序命令被逐个直接解释执行 b.先将源程序转化为之间代码,再解释执行c.先将源程序解释转化为目标程序,在执行d.以上方法都可以1-15.用高级语言编写的程序经编译后产生的程序叫 b .用不同语言编写的程序产生 a 后,可用 g 连接在一起生成机器可执行的程序.在机器中真正执行的是 e .a. 源程序b. 目标程序c. 函数d. 过程e. 机器指令代码f. 模块g. 连接程序h.程序库1-16.要在某一台机器上为某种语言构造一个编译程序,必须掌握下述三方面的内容: c , d , f .a. 汇编语言b. 高级语言c. 源语言d. 目标语言e. 程序设计方法f. 编译方法g. 测试方法h. 机器语言1-17.由于受到具体机器主存容量的限制,编译程序几个不同阶段的工作往往被组合成(1)d ,诸阶段的工作往往是 (2)d 进行的.(1) a. 过程 b. 程序 c. 批量 d.遍(2) a. 顺序 b. 并行 c. 成批 d.穿插1-18.编译程序与具体的机器 a , 与具体的语言 a .a. 有关b.无关1-19.使用解释程序时,在程序未执行完的情况下, a 重新执行已执行过的部分.a. 也能b.不可能1-20.编译过程中,语法分析器的任务就是 b .(1) 分析单词是怎样构成的(2)分析单词串是如何构成语句和说明的(3) 分析语句和说明是如何构成程序的 (4) 分析程序的结构a. (2)(3)b. (2)(3)(4)c. (1)(2)(3)d.(1)(2)(3)(4)1-21.编译程序是一种常用的 b 软件.a. 应用b. 系统1-22.编写一个计算机高级语言的源程序后,到正式上机运行之前,一般要经过 b 这几步.(1) 编辑 (2) 编译 (3) 连接 (4) 运行a. (1)(2)(3)(4)b. (1)(2)(3)c. (1)(3)d.(1)(4)1-23.编译程序必须完成的工作有 a .(1) 词法分析 (2) 语法分析 (3) 语义分析(4) 代码生成 (5) 之间代码生成 (6) 代码优化a. (1)(2)(3)(4)b. (1)(2)(3)(4)(5)c. (1)(2)(3)(4)(5)(6)d. (1)(2)(3)(4)(6)e. (1)(2)(3)(5)(6)1-24.“用高级语言书写的源程序都必须通过编译,产生目标代码后才能投入运行”这种说法a .a. 不正确b.正确1-25.把汇编语言程序翻译成机器可执行的目标程序的工作是由 b 完成的.a. 编译器b. 汇编器c. 解释器d. 预处理器1-26.编译程序生成的目标程序 b 是机器语言的程序.a. 一定b. 不一定1-27.编译程序生成的目标程序 b 是可执行的程序.a. 一定b. 不一定1-28.编译程序是一种 B 。
编译原理复习题及答案doc下载
编译原理复习题及答案doc下载以下是编译原理复习题及答案的正文内容:1. 什么是编译器的主要功能?编译器的主要功能是将源代码转换成目标代码,包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等步骤。
2. 词法分析的主要任务是什么?词法分析的主要任务是将源程序的字符序列转换成一系列的标记(token),并识别出其中的关键字、标识符、常量、运算符等。
3. 语法分析的目的是什么?语法分析的目的是检查源代码的语法结构是否符合语言的语法规则,并构建出抽象语法树(AST)。
4. 什么是语义分析?语义分析是编译过程中的一个阶段,它在语法分析的基础上,对源代码进行上下文相关的检查,确保变量的声明和使用是合法的,以及类型检查等。
5. 中间代码生成的作用是什么?中间代码生成的作用是将抽象语法树转换成一种中间表示形式,这种表示形式既接近于源代码,又方便后续的优化和目标代码生成。
6. 代码优化的目的是什么?代码优化的目的是为了提高程序的执行效率和减少资源消耗,通过各种优化技术改进中间代码。
7. 目标代码生成包括哪些步骤?目标代码生成包括指令选择、寄存器分配、指令调度等步骤,最终生成可以在特定硬件上运行的目标代码。
8. 什么是编译器前端和后端?编译器前端包括词法分析、语法分析、语义分析和中间代码生成,而后端包括代码优化和目标代码生成。
9. 什么是词法单元?词法单元是词法分析过程中识别的基本单位,包括关键字、标识符、常量、运算符等。
10. 什么是左递归?左递归是指在文法的产生式中,一个非终结符直接或间接地在其产生式右边以自身开始的情况。
以上是编译原理的复习题及答案,供参考和学习使用。
编译原理期末总结复习
编译原理期末总结复习编译原理期末总结复习篇一:一、简答题1.什么是编译程序?答:编译程序是一种将高级语言程序(源程序)翻译成低级语言(目标程序)的程序。
将高级程序设计语言程序翻译成逻辑上等价的低级语言(汇编语言,机器语言)程序的翻译程序。
2.请写出文法的形式定义?答:一个文法G抽象地表示为四元组 G=(Vn,Vt,P,S)–其中Vn表示非终结符号– Vt表示终结符号,Vn∪Vt=V(字母表),Vn∩Vt=φ– S是开始符号,–P是产生式,形如:α→β(α∈V+且至少含有一个非终结符号,β∈V*)3.语法分析阶段的功能是什么?答:在词法分析的基础上,根据语言的语法规则,将单词符号串分解成各类语法短语(例:程序、语句、表达式)。
确定整个输入串是否构成语法上正确的程序。
4.局部优化有哪些常用的技术?答:优化技术1—删除公共子表达式优化技术2—复写传播优化技术3—删除无用代码优化技术4—对程序进行代数恒等变换(降低运算强度)优化技术5—代码外提优化技术6—强度削弱优化技术7—删除归纳变量优化技术简介——对程序进行代数恒等变换(代数简化)优化技术简介——对程序进行代数恒等变换(合并已知量)5.编译过程分哪几个阶段?答:逻辑上分五个阶段:词法分析、语法分析、语义分析与中间代码生成、代码优化、目标代码生成。
每个阶段把源程序从一种表示变换成另一种表示。
6. 什么是文法?答:文法是描述语言的语法结构的形式规则。
是一种工具,它可用于严格定义句子的结构;用有穷的规则刻划无穷的集合;文法是被用来精确而无歧义地描述语言的句子的构成方式;文法描述语言的时候不考虑语言的含义。
7. 语义分析阶段的功能是什么?答:对语法分析所识别出的各类语法范畴分析其含义,进行初步的翻译(翻译成中间代码);并对静态语义进行审查。
8.代码优化须遵循哪些原则?答:等价原则:不改变运行结果有效原则:优化后时间更短,占用空间更少合算原则:应用较低的代价取得较好的优化效果9.词法分析阶段的功能是什么?答:逐个读入源程序字符并按照构词规则切分成一系列单词任务:读入源程序,输出单词符号—滤掉空格,跳过注释、换行符—追踪换行标志,指出源程序出错的行列位置—宏展开,……10.什么是符号表?答:符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息。
编译原理期末复习题
目标代码生成算法及实现
要点一
目标代码生成算法
目标代码生成算法是将中间代码或高级语言程序转换为目 标代码的算法。常见的目标代码生成算法包括基于模板的 方法、基于树的方法、基于线性扫描的方法等。这些方法 根据不同的转换策略和目标机器特性,生成相应的目标代 码。
要点二
目标代码生成的实现
目标代码生成的实现通常包括指令选择、寄存器分配、内 存访问优化等步骤。指令选择是根据目标机器指令集选择 合适的指令实现中间代码的操作;寄存器分配是为变量分 配寄存器以减少内存访问开销;内存访问优化则是通过调 整内存访问顺序、使用缓存等方式提高内存访问效率。在 实现过程中,还需要考虑异常处理、调试信息生成等问题 。
编译原理的发展趋势与挑战
• AI驱动的优化:利用AI技术进一步提高编译器的优化能力。
编译原理的发展趋势与挑战
性能与可维护性的平衡
在提高编译器性能的同时,需要保持其可维 护性和可扩展性。
复杂性增加
随着软件规模的扩大和编程语言的发展,编 译器的复杂性不断增加。
新技术与新应用的适应
编译器需要不断适应新技术和新应用的发展, 如量子计算、生物计算和光计算等。
目标代码的形式与特点
目标代码的形式
目标代码是编译器生成的机器语言代码,通 常以二进制形式存在。目标代码可以被计算 机直接执行,也可以作为其他程序的输入进 行链接和编译。
目标代码的特点
目标代码具有与特定计算机体系结构相关的 特点,如指令集、寄存器使用、内存访问方 式等。此外,目标代码还具有可移植性差、 可读性差等缺点,因此通常需要配合相应的 调试和反汇编工具进行开发和维护。
LR分析法
一种自底向上的分析方法,通过 构造一个识别活前缀的有限自动 机来实现语法分析。适用于大多 数上下文无关文法描述的语言结 构。
(完整版)编译原理复习题
(完整版)编译原理复习题《编译原理》常见题型一、填空题1、编译程序的工作过程一般可以划分为词法分析,语法分析,语义分析,中间代码生成,目标代码生成等几个基本阶段。
2、若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序。
3、编译方式与解释方式的根本区别在于是否生成目标代码。
5、对编译程序而言,输入数据是源程序,输出结果是目标程序。
7、若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序。
8、一个典型的编译程序中,不仅包括词法分析、语法分析、中间代码生成、代码优化、目标代码生成等五个部分,还应包括表格处理和出错处理。
其中,词法分析器用于识别单词。
10、一个上下文无关文法所含四个组成部分是一组终结符号、一组非终结符号、一个开始符号、一组产生式。
12、产生式是用于定义语法成分的一种书写规则。
13、设G[S]是给定文法,则由文法G所定义的语言L(G)可描述为L(G)={x│S*x,x∈V T*} 。
14、设G是一个给定的文法,S是文法的开始符号,如果S*x(其中x∈V*),则称x是文法的一个句型。
15、设G是一个给定的文法,S是文法的开始符号,如果S*x (其中x∈V T*),则称x是文法的一个句子。
16、扫描器的任务是从源程序中识别出一个个单词符号。
17、语法分析最常用的两类方法是自上而下和自下而上分析法。
18、语法分析的任务是识别给定的终结符串是否为给定文法的句子。
19、递归下降法不允许任一非终结符是直接左递归的。
20、自顶向下的语法分析方法的关键是如何选择候选式的问题。
21、递归下降分析法是自顶向下分析方法。
22、自顶向下的语法分析方法的基本思想是:从文法的开始符号开始,根据给定的输入串并按照文法的产生式一步一步的向下进行直接推导,试图推导出文法的句子,使之与给定的输入串匹配。
23、自底向上的语法分析方法的基本思想是:从给定的终结符串开始,根据文法的规则一步一步的向上进行直接归约,试图归约到文法的开始符号。
编译原理-期末复习
编译原理-期末复习编译原理⼀、单选题1、将编译程序分为若⼲个“遍”是为了()。
BA.提⾼程序的执⾏效率B.使程序的结构更加清晰C.利⽤有限的机器内存并提⾼机器的执⾏效率D.利⽤有限的机器内存但降低了机器的执⾏效率2、构造编译程序应掌握()。
DA.源程序B.⽬标语⾔C.编译⽅法D.以上三项都是3、变量应当()。
CA.持有左值B.持有右值C.既持有左值⼜持有右值D.既不持有左值也不持有右值4、编译程序绝⼤多数时间花在()上。
DA.出错处理B.词法分析C.⽬标代码⽣成D.管理表格5、()不可能是⽬标代码。
DA.汇编指令代码B.可重定位指令代码C.绝对指令代码D.中间代码6、编译程序是对()。
DA.汇编程序的翻译B.⾼级语⾔程序的解释执⾏C.机器语⾔的执⾏D.⾼级语⾔的翻译7、正规式M1和M2等价是指()。
CA.M1和M2的状态数相等B.M1和M2的有象弧条数相等C.M1和M2所识别的语⾔集相等D.M1和M2状态数和有象弧条数相等8、如果⽂法G是⽆⼆义的,则它的任何句⼦()。
AA.最左推导和最右推导对应的语法树必定相同。
B.最左推导和最右推导对应的语法树可能相同。
C.最左推导和最右推导必定相同。
D.可能存在两个不同的最左推导,但它们对应的语法树相同。
9、⽂法G:S→S+T|TT→T*P|PP→(S)|i句型P+T+i的短语有()BA.i,P+TB. P,P+T,i,P+T +iB.P+T + i D. P,P+T,i10、产⽣正规语⾔的⽂法为()。
DA.0型B.1型C.2型D.3型11、⽂法G:S→b|?|(T)T→T?S|S则FIRSTVT(T)=() CA.{b,?,(}B.{b,?,)}C.{b,?,(,?}D.{b,?,),?}12、给定⽂法:A→bA | cc,下⾯的符号串中,为该⽂法句⼦的是()。
A①cc ②bcbc ③bcbcc ④bccbcc ⑤bbbcc可选项有:A.①B.①③④⑤C.①④D.①④⑤13、采⽤⾃上⽽下分析,必须()。
编译原理期末考试复习整理(详细列出考试重点+重点例题)
编译原理期末考试复习整理(详细列出考试重点+重点例题)本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March目录第一章 (3)词法分析: (3)语义法分析 (3)中间代码 (3)第二章 (3)1.根据语言写出文法 (4)2.根据文法写语,描述其特点(必考大题2-3类型) (4)3.文法的规范推导、语法树、短语、句柄(必考大题,2-7,2-11) (6)第三章 (11)1.给出一个正规文法 (左线性、右线性方法),写出其状态转换图(必考) (11)1.1右线性文法写出状态转换图 (必考) (11)1.2状态转换图写出右线性文法G (12)1.3左线性文法写出状态转换图 (必考) (13)2.非确定自动机的确定化 (14)第四章 (15)第五章 (15)属性文法与属性翻译文法 (15)逆波兰式(大题) (16)四元式(大题) (16)第一章词法分析:分析源程序的结构,判断它是否是相应程序设计语言的合法程序语义法分析的任务是根据语言的语义规则对语法分析得到的语法结构进行静态的语义检查(确定类型、类型与运算合法性检查、识别含义等),并且转换成另一种内部形式(语义树)表示出来或者直接用目标语言表示出来。
中间代码是一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种多样的形式,重要的设计原则为两点:一是容易生成;二是便于优化、移值;三是容易将它翻译成目标代码第二章文法G定义为四元组(V N,V→,P,S )其中V N为非终结符号(或语法实体,或变量)集;V→为终结符号集;P为产生式(也称规则)的集合; V N,V→和P是非空有穷集。
S称作识别符号或开始符号,它是一个非终结符,至少要在一条产生式中作为左部出现。
V N和V→不含公共的元素,即V N ∩V→ = φ,通常用V 表示V N∪ V→,V称为文法G的字母表或字汇表。
编译原理期末复习题(答案)
北方工业大学《编译原理》课程期末复习题(答案)A 卷开课学院考试方式:闭卷考试时间:120 分钟班级 姓名 学号 一判断题(每个小题1分,共10分)1. 程序语言主要由语法和语义两方面定义。
( )2. 自上而下分析方法会遇到的主要问题有左递归和回溯。
( )3. 已知文法G :E →i | EAE ,A →+|* ,其中的终结符号集包括{i ,+}。
( )4. 编译程序是将高级语言程序翻译成机器语言程序。
( )5. 只含有综合属性的属性文法称为S-属性文法。
( )6. LL(1)文法中第一个L 的含义是从左到右扫描输入串。
( )7. 在编译中进行语法检查的目的是为了发现程序中所有错误。
( )8. 一个语义子程序描述了一个文法所对应的翻译工作。
( )9. 一个句型的直接短语是唯一的。
( ) 10. 确定的自动机以及不确定的自动机都能正确地识别正规集。
( ) 解:1.√ 2.√ 3.× 4.× 5.√ 6.√ 7.× 8.× 9.× 10.√二、选择题(每个小题1分,共20分)1. 文法分为四种类型,即0型、1型、2型、3型。
其中3型文法是____。
A. 短语文法 B. 正规文法 C. 上下文有关文法 D. 上下文无关文法2. 不可能是目标代码。
A. 汇编指令代码B. 可重定位指令代码C. 绝对指令代码D. 中间代码 3. 将编译程序分成若干个“遍”是为了 。
A. 提高程序的执行效率B. 利用有限的机器内存并提高机器的执行效率C. 使程序的结构更加清晰D. 利用有限机器内存但降低了机器的执行效率 4. 后缀式ab+cd+/可用表达式 来表示。
订线装A. a+b/c+dB. (a+b)/(c+d)C. a+b/(c+d)D. a+b+c/d5. 文法G:S→xSx|y所识别的语言是。
A. xyxB. (xyx)*C. x n yx n(n≥0)D. x*yx*6. 文法G[E]:E→E+T|TT→T*P|PP→(E)|i则句型P+T+i的句柄和最左素短语为。
编译原理试题及答案(期末复习版)
<编译原理>历年试题及答案一.(每项选择2分,共20分)选择题1.将编译程序分成若干个“遍”是为了_b__。
a.提高程序的执行效率b.使程序的结构更加清晰c.利用有限的机器内存并提高机器的执行效率d.利用有限的机器内存但降低了机器的执行效率2.构造编译程序应掌握__d__。
a.源程序b.目标语言c.编译方法d.以上三项都是3.变量应当c_。
a.持有左值b.持有右值c.既持有左值又持有右值d.既不持有左值也不持有右值4.编译程序绝大多数时间花在_d___上。
a.出错处理b.词法分析c.目标代码生成d.管理表格5.词法分析器的输出结果是_c___。
a.单词的种别编码b.单词在符号表中的位置c.单词的种别编码和自身值d.单词自身值6.正规式MI和M2等价是指__c__。
a.MI和M2的状态数相等b.Ml和M2的有向弧条数相等。
C.M1和M2所识别的语言集相等 d.Ml和M2状态数和有向弧条数相等7.中间代码生成时所依据的是—c。
a.语法规则b.词法规则c.语义规则d.等价变换规则8.后缀式ab+cd+/可用表达式__b_来表示。
a.a+b/c+d b.(a+b)/(c+d)c.a+b/(c+d)d.a+b+c/d9.程序所需的数据空间在程序运行前就可确定,称为____c__管理技术。
a.动态存储b.栈式存储c.静态存储d.堆式存储10.堆式动态分配申请和释放存储空间遵守___d_____原则。
a.先请先放b.先请后放c.后请先放d.任意二(每小题10分,共80分)简答题1.画出编译程序的总体结构图,简述各部分的主要功能。
2.已知文法G[E]:E→ET+|T T→TF*|F F→F^|a试证:FF^^*是文法的句型,指出该句型的短语、简单短语和句柄.3.为正规式(a|b)*a(a|b)构造一个确定的有限自动机。
4.设文法G(S):S→(L)|a S|aL→L,S|S(1)消除左递归和回溯;(2)计算每个非终结符的FIRST和FOLLOW;(3)构造预测分析表。
编译原理期末复习
编译原理期末复习鉴于编译原理马上就要期末考试,我将手中集中的一些资料上的题目进行了整理归类,每种类型题目给出了所涉及到的基本知识,然后对每类题目中的第一道例题进行了做法进行了讲解,剩下的例题请给大家作为练习,答案也都给出,希望对大家复习有所帮助,最后由于时间很紧,整理的有些仓促,整理中难免有遗漏或错误,请大家见谅;注:下面出现的字母中,若无特别说明,小写英文字母为终结符,大写英文字母为非终结符,希腊字母为终结符与非终结符的任意组合;1、简答题或者名词解释下面涉及到的概念中,加下划线的都是在以往一些试卷中出现的原题,务必掌握;注:这类题目老师说答案不会超过一百个字,否则写的再多也不给分,有些点到即可,不要重复啰嗦;1简述编译程序的概念及其构成答:1编译程序:它特指把某种高级程序设计语言翻译成等价的低级程序设计语言的翻译程序;2构成:2简述词法分析阶段的主要任务也有可能问语法分析阶段主要任务答:词法分析的任务是输入源程序,对源程序进行扫描,识别其中的单词符号,把字符串形式的源程序转换成单词符号形式的源程序;语法分析的主要任务是对输入的单词符号进行语法分析根据语法规则进行推导或者归约,识别各类语法单位,判断输入是不是语法上正确的程序3 简述编译程序的构造过程这个大家看看,是对1和2的综合答:1构造词法分析器:用于输入源程序进行词法分析,输出单词符号;2构造语法分析器:对输入的单词符号进行语法分析,识别各类语法单位,判断输入是不是语法上正确的程序3构造语义分析和中间代码产生器:按照语义规则对已归约出的语法单位进行语义分析并把它们翻译成中间代码;4构造优化器:对中间代码进行优化;5 构造目标代码生成器:把中间的代码翻译成目标程序;6 构造表格管理程序:登记源程序的各类信息和编译各阶段的进展情况;7构造错误处理程序:对出错进行处理;4 说明编译和解释的区别:1编译要程序产生目标程序,解释程序是边解释边执行,不产生目标程序; 2编译程序运行效率高而解释程序便于人机对话;5 文法:描述语言语法结构的形式规则,一般用一个四元式表示: G=VT ,VN,S,P,其中VT :终结符集合非空 VN:非终结符集合非空,且VTVN= S:文法的开始符号,SVNP:产生式集合有限;6二义性文法:一个文法中存某个句子,它有两个不同的最左或者最右推导,则称该文法是二义性的;例子如文法G :S →if expr then S |otherS →if expr then S else S 句子if e1 then if e2 then s1else s2是二义性的;7文法的形式注:文法的形式一定要牢记,特别是2型和3型文法一定要牢记,不仅在概念题中有用,在下面的根据语言写文法题中也有重要作用,如果所写的文法形式不对,一切都是无用功……10型文法短语文法,图灵机:产生式形式为: ,其中: V T V N 且至少含有一个非终结符; V T V N21型上下文有关文法,线性界限自动机:产生式形式为: 其中:|| ||,仅 S 例外但是S 不得出现在任何产生式右部;32型文法上下文无关文法,非确定下推自动机:产生式形式为:P, PV N , V T V N ; 43型文法正规文法,有限自动机:右线性文法:产生式形如:A B 或 A 其中: V T ;A,BV N 左线性文法:产生式形如:A B 或 A 其中: V T ;A,BV N例题:设G=V T ,V N ,S,P 是一个上下文无关文法,产生集合P 中的任一个产生式应具有什么样的形式若G 是1型文法呢若G 是正则文法呢 上下文无关文法, 产生式形式为:P, PV N , V T V N ; 1型文法:产生式形式为: 其中:|| ||,仅 S 例外;正则文法:右线性文法:产生式形如:A B 或 A 其中: V T ;A,BV N左线性文法:产生式形如:A B 或 A 其中: V T ;A,BV N 8什么是PDA 下推自动机答:PDA 是下推自动机,PDA M 用一个七元组表示K,Σ,f,H,h0,S,Z K: 有穷状态集 :输入字母表有穷 H:下推栈符号的有穷字母表h0 :H中的初始符号f: K Σ{} H –> K H S:属于K是初始状态;Z:包含于K,是终结状态集合;9 什么是DFA有穷状态自动机, F,其中:自动机M是一个五元式M=S, , f, S1S: 有穷状态集, 2 :输入字母表有穷,3 f: 状态转换函数,为SS的单值部分映射,fs,a=s’表示:当现行状态为s,输入字符为a时,将状态转换到下一状态s’;我们把s’称为s的一个后继状态;S是唯一的一个初态; 5 FS :终态集可空;4 S10推导:所谓推导就是对于一个含非终结符A的符号串,利用规则A→α,把A替换成α得到新符号串的过程;最左推导:在推导的每一步,选择符号串最左边的非终结符进行替换;最右推导:在推导的每一步,选择符号串最右边的非终结符进行替换;11归约:归约是推倒的逆过程,即用产生式的左部非终结符替换右部符号串;12什么是句型什么称为句子什么是语言句型:从文法的起始符号出发,经过有限步的推导能够推导出来的符号称为句子;句子:只由终结符构成的句型称为句子;语言:所有句子的集合构成该文法描述的语言;13什么是短语什么是直接短语也称为简单短语什么是句柄什么是素短语什么是最左素短语以下几个概念一定要理解,考试中肯定会考哪些是短语,直接短语,句柄等,具体方法请参见后面的短语:如果存在某个文法非终结符P,满足S*⇒βPγ,并且P+⇒α则称α为句型βαγ相对于非终结符P的短语;直接短语:如果Pα,即从P出发一步推出α,则α称为直接短语;句柄:一个句型的最左直接短语称为该句型的句柄;素短语:至少含有一个终结符的短语,并且除了自身外,不包含更小的素短语;最左素短语:句型中最左边的素短语;14自顶向下的语法分析方法中需要解决的主要问题什么如何表示答:1主要需要解决回溯和左递归问题;2表示方式,回溯:文法中存在形如A→α1|α2|…|αn,即产生式右部存在多个候选,导致推导时不能确定到底应该选择哪个候选式;左递归:文法中存在形如P→Pα的形式,推导时会导致推导过程无休止的进行下去;注:解决方法,对回溯采取的是提取左公因子,对左递归使消除左递归包括直接左递归和间接左递归;15内情向量:一般编译程序对数组说明的处理是把数组的有关信息汇集在一个叫做“内情向量”或“信息向量”的表格中,以便以后计算数组元素的地址时引用这些信息;每个数组有一个内情向量;其中的信息包括,数组的类型,维数,各维的上、下界,以及数组的首地址;(16) C语言的活动记录:SP TOP2、最左最右推导,画语法树,找短语、直接短语、句柄等;这种题目很简单,送分题,一定不能丢分考题:1文法GS为:S→SdT | T T→T<G | G G→S | a试给出句型SdG<a的推导过程及语法树,并找出SdG<a的短语,直接简单短语、句柄和最左素短语;分析:1推导和画语法树这些都很简单,不再赘述;2根据所画出的语法树,可以很快的找出短语,直接短语,句柄和最左素短语等,先讲一个简单子树的概念,所谓简单子树是指仅具有单层分支的子树;具体方法如下:短语:任一子树的树叶全体具有共同祖先的叶节点符号串皆为短语;直接短语:任一简单子树的树叶全体具有共同父亲的叶节点符号串皆为简单短语;句柄:最左边的直接短语;素短语:至少含有一个终结符的短语,并且除了自身外,不包含更小的素短语;最左素短语:最左边的素短语;答:1S T T<G G<G S<GSdT<G SdG<GSdG<a语法树:2短语:G,SdG, SdG, a, SdG<a 直接短语:G,a 句柄:G 最左素短:a 注:还有一份试卷将句型改为adT<S,与这个类似,大家自己做做,答案是短语:a,S,T<S,adT<S 直接短语:a,S 句柄:a 最左素短语:SdG下面两道例题大家看看,一定要会找短语,直接短语,句柄等.考题:2文法GE的产生式为E→E+T|T T→TF|F F→i|E①对于句型i+ii,给出最左最右推导及相应的推导树②列出句型的所有短语、简单短语;还有一份试卷上是出句型F+TF的所有短语、简单短语和句柄,大家自己做做答:1最左推导:E TTFFFEFE+TFT+TFF+TFi+TFi+FFi+iFi+ii最右推导ETTFTiFiEiE+TiE+FiE+iiT+iiF+iii+ii推导树如下:2短语;i,i+i,i+i,i+ii 直接短语:i 句柄:i3、根据语言推文法这类题目首先要看清题目,指定的是什么文法,一般都是2型上下无关文法或者3型正规文法,这两类文法形式一定要记住,具体请参见第2页的文法分类;掌握几个基本形式{a n| n>0}对应文法S→aS| a 如果是n>=0则为S→a S|εε是空字{a n b n | n>0}对应文法S→aSb| ab下面这四道题目老是在试卷中重复出现,所以大家好好看看;考题这是书P36 第11题的答案如下:大家作为练习,可以发现比上述题目简单的多了;或者 G4:4、词法分析———正规式、NFA 和DFA 之间的转化:1这类题目一般是三者之间的转换,正规式→NFA →确定化的DFA→最小化的DFA,有时已经给出NFA 了,则只需要确定化为DFA 和最小化就行了,一般每一步都是五分;具体怎么转换请参照我期中考试时整理的提纲,主要就是下面这幅关系对照图,因时间和篇幅限制不再追溯; 2注意优先级关系,闭包运算最高,连接运算.次之,或运算|最低; 3考题1:1构造正则式ab|abb 对应的DFA;15分 ①画出NFA ②确定化DFAG1: S →ACG2: S →ABG3: S →AB A →aAb|εG4:S →1S0|A注:C和E是终态③最小化DFA首先将集合分为{A,B,D,F,G},{C,E};{A,B,D,G}都有a,b作为条件输出,F只有b输出,所以分为{A,B,D,G}和{F} 同理{C,E}分为{C},{E};{A,B,D}a ={B,D} {G}a={F}所以{A,B,D,G}分为{A,B,D}和{G};{A}b ={C} {B,D}a={D}所以分为{A} {B,D}综上所述:划分的结果为{A},{B,D},{C},{E},{G}.考题2:将NFA确定化为DFA10分NFA:含有Y的状态子集为DFA的终态,题目中要求是确定化,{F},{D},{E}然后再画出最小化后的考题3:构造奇数个0和奇数个1组成的自动机;10分状态1:偶数个0 偶数个1 状态2:奇数个0偶数个1状态3:奇数个0 奇数个1 状态4:偶数个0奇数个1如果题目改成偶数个0,奇数个1,只要将状态4转换成终态即可,其他类似;5、语法分析——自顶向下分析法LL1分析法和递归向下构造子程序法注:自顶向下分析法本质是由开始符号,按照产生式逐步推导看能否产生需要分析的句子;1自顶向下分析中存在的问题左递归和回溯具体请参见简答题中的第14题 2消除回溯——提取公因子法提取公共左因子:假定关于A 的规则 A→ 1 | 2 | …| n | 1 | 2 | … | m 其中,每个 不以开头 那么,可以把这些规则改写成A→A | 1 | 2 | … | mA→ 1 | 2 | … | n3消除左递归1消除直接左递归:直接消除见诸于产生式中的左递归:假定关于非终结符P 的规则为P→P | ,其中不以P 开头; 我们可以把P 的规则等价地改写为如下的非直接左递归形式:P→P P→P|注:一般而言,假定P 关于的全部产生式是P→P 1 | P 2 | … | P m | 1 | 2|…|n 其中,每个都不等于,每个都不以P 开头 那么,消除P 的直接左递归性就是把这些规则改写成: P→1P | 2P | … | n P P→1P | 2P |… | m P | 例:文法GE:E→E +T | T T→TF | F F→E | i 经消去直接左递归后变成:E→TE E→+TE | T→FT T →FT | F→E | i2消除间接左递归这个请参见我期中整理的提纲篇幅较多,这里不再重复赘述,请参照下面的考题2;考题1:将文法GS改写为等价的G’S,使得G’S不含左递归和左公因子;S→A A→B|AS B→aB|a答:消除左递归和左公因子后的文法为:S→A A→ BA’A’ → S A’| B→aB’B’ →B|考题2:写出文法GA: A→Ba|Cb|c B→dA|Ae|f C→Bg|h消除左递归后的文法;答:1经分析发现文法GA并无直接左递归;2消除间接左递归:将A,B,C按照B,C,A排序建议将A放在最后由于出现C →Bg形式,将B代入C得:C→dAg|Aeg|fg|h又由于A出现A→Ba A→Cb将B,C带入A得到:A→dAa|Aea|fa|dAgb|Aegb|fgb|hb|c等价于A→Aea|Aegb |dAa|fa|dAgb |fgb|hb|c将A消除直接左递归A→dAaA’|fa A’|dAgb A’ |fgb A’|hb A’|c A’A’→ea A’| egb A’|此时,对于B→dA|Ae|f,C→dAg|Aeg|fg|h由于未在任何产生式的右部出现,所以是多余的;综上所述:消除递归后的文法为:A→dAaA’|fa A’|dAgb A’ |fgb A’|hb A’|c A’A’→ea A’| egb A’|4LL1分析法1含义:LL1分析方法也叫预测分析法:是指从左到右扫描、最左推导LL和只查看一个当前符号括号中的 1;2判断一个文法是否是LL1文法的充要条件:1. 文法不含左递归,2. 对于文法中每一个非终结符A的各个产生式的候选首符集两两不相交;即,若A→ 1| 2|…| n则FIRST i∩FIRST j=ij3. 对文法中的每个非终结符A,若它存在某个候选首符集包含,则FIRSTi∩FOLLOWA= i=1,2,...,n如果一个文法G满足以上条件,则称该文法G为LL1文法;5LL1文法分析表的构造与运用这类题目,主要就是判断文法是否满足LL1文法的三个充要条件,分为以下几步:1首先将文法分解,判断是否有左递归好,有的话肯定不是LL1文法;2算非终结符的First集合和Follow集合,具体方法请参见期中考试的提纲,其实最本质的要抓住first集合是U*a…,Follow集合石…Ua…即可;3算Select集合,书上没有提到Select集合,计算Select集合实质就是计算First,当然考试时不一定非要写成Select集合形式,可以直接计算First来判断交集是否为空,从而是否为LL1文法,请看考题1;4至于判断一个句子的分析过程,大家注意一下,所给的句子不一定是能通过该文法分析出来的,实际上在分析之前可以自己根据文法推推看,请看考题1.5分析表中没有填的空格代表出错,如果分析时遇到了代表该句子不符合该文法; 考题1:判断下面文法是否为LL1文法,若是,请构造相应的LL1分析表并分析句子aabe的分析过程;15分S→aD D→STe|εT→bM M→bH H→M|ε分析:判断一个文法是否为LL1文法是否为LL1文法,主要就是判断是否满足LL1文法的充要条件,有一个不满足就不是LL1文法;对于aabe根据文法SaDaSTeaaDTeaaTeaabMe由于M不能为空字ε,所以最后肯定推不出来,也就是该句子不能由该文法推出,出错;当然一般题目都是LL1文法,否则题目就不好往下做,没有意义;答:1经分析该文法无左递归;2①非终结符的First和Follow集合如下表所示②将文法分解为:S→aD D→Ste D→ε T→bM M→bH H→M H→ε依次计算:FirstaD={a} FirstSte={a}FollowD={ b} FirstbM={b}FirstbH={b} FirstM={b} FollowH={ e }∵FirstSte∩FollowD=ФFirstM∩FollowH=Ф∴该文法是LL1文法LL1分析表如下:3aabe的分析过程如下:考题2:判断下面文法是不是LL1文法,若是请构造相应的LL1分析表,写出aaabd 的分析过程;S→aH H→aMd|d M→Ab|A→aM|e答:1可以判断该文法无左递归;2将文法分解为分解:S→aH H→aMd H→d M→Ab M→A→aM A→e 求First和Follow集合求Select集合SelectS→aH=FirstaH={a} SelectH→aMd=FirstaMd={a}SelectH→d={d} SelectM→Ab=FirstAb={a,e}SelectM→=FirstUFollowM= FollowM={d,b}Select A→aM=First{aM}={a} Select A→e=Firste={e}∵SelectH→aMd ∩SelectH→d= ФSelectM→Ab ∩SelectM→e=ФSelectA→aM ∩SelectA→e= Ф∴该文法是LL1文法;3LL1分析表如下:aaabd的分析过程如下:考题3:构造LL1分析方法的总控流程图6、构造递归下降识别程序这类题目首先看文法有无左递归和左公因子,有的话一定要消除,我期中给大家的答案错了,考题1为更正后的答案;考题1:为文法GE:E → V | V+E V → N | NE N → i构造递归下降识别程序10分解:1提取左公因子:E→VE’E’ →+E|V →NV’V’→E|N → i(3)构造递归下降识别程序PROCEDURE E;BEGINV; E’END; PROCEDURE E’;IF SYM=‘+’ THENBEGINADVANCE;EENDPROCEDURE V;BEGINEND;PROCEDURE F;IF SYM=‘’ THEN BEGINADVANCE; E;IF SYM=‘’PROCEDURE N;IF SYM=‘i’ THENADVANCEELSE ERROR;THENADVANCEELSE ERRORENDELSE ERROR;考题2:为文法GE:E→E+T|T T→TF|F F→E|i构造递归下降识别程序解:1消除左递归:E→TE E→+TE | T→FT T→FT | F→E | i 2构造递归下降识别程序PROCEDURE E;BEGINT;E END;PROCEDURE T;BEGINF;TENDPROCEDURE F;IF SYM=‘i’ THENADVANCEELSEIF SYM=‘’ THENBEGINADVANCE;E;IFSYM=‘’ THENADVANCEELSE ERRORENDELSE ERROR;PROCEDURE E;IF SYM=‘+’ THENBEGINADVANCE; T;EEND PROCEDURE T;IF SYM=‘’ THENBEGINADVANCE; F;TEND7、自底向上分析法——LR0分析法注:自底向上分析法本质是从输入串开始,逐步进行“归约”,直到文法的开始符号,其关键问题是寻找句柄;自底向上分析法还有算符优先分析法,SLR1,LR1等等,老师那天重点讲了一道LR0分析法的题目,他说算符优先分析法A卷不考,但是补考的B卷会考,按照他的意思,这次期末考试LR0是考定的了,SLR1,LR1应该不考,因为LR0分析法个人感觉也是所有题目中最繁的了,下面已老师讲的题目为例这,也是一份试卷上的考题,首先介绍一些相关知识;(1)LR0项目:通俗点讲,文法G中的任何一个产生式的右部的任何位置添加一个圆点就成了LR0项目,比如A→Ab是产生式,则A→Ab A→Ab A→Ab都是该产生式对应的全部项目;项目动态的表示归约的一个阶段:对于项目A→A b,可以这样理解它:“”之前的A表示的是在识别Ab过程中已输入到栈终的部分;“”之后的表示在识别Ab过程中期望出现的部分;“”表示则是在识别Ab过程中当前的识别进度的定位;项目A→Ab 已经具备了识别Ab的一切条件,因此被称为归约项目;项目可以分为以下四类:P→αaβ称为移进项目其中, P→αXβ称为待约项目,其中X为非终结符,P→α称为归约项目,S’→S称为接收项目2LR0的分析栈可以看成两部分状态栈LR分析器的核心是一张分析表:ACTIONs,a:当状态s面临输入符号a时,应采取什么动作.GOTOs,X:状态s面对文法符号X时,下一状态是什么. 下面几张PPT大家看看,对基本概念有个印象:这一章的概念较多较抽象,我一时半会也讲不完讲不清楚,这里不再赘述,直接看题目,知道怎么做就行,下面以一道考题这也是老师讲的原题为例讲解如何做这类题目,首先一般这种题目分三步走:1拓广文法:假定文法G是一个以S为开始符号的文法,我们构造一个G,它包含了整个G,但它引进了一个不出现在G中的非终结符S,并加进一个新产生式S→S,而这个S是G的开始符号;那么,我们称G是G的拓广文法;这样,便会有一个仅含项目S→S.的状态,这就是唯一的“接受”态;2构造识别文法活前缀的DFA:对于任意的项目即I,其闭包CLOSUREI计算方法如下,I中的所有项目都属于CLOSUREI;如果P→αXβ,并且X为非终结符,则所有形如X→γ的项目也属于ClOSUREI定义函数GOI,X,其中I是项目集,X是任意的文法符号终结符,非终结符都可以,GOI,X=CLOSUREJ.J是从I中项目出发后读取X后到达的后继项目,即J={P→αXβ| P→αXβ∈I}有了上述CLOSURE和GO的定以后,从CLOSURE{S→S}出发,利用GO函数,产生出它在每个可能的文法符号下,要转移的项目集,再对新产生的项目集采取同样的方法直到没有新产生的项目集未被处理为止;(4) 根据计算出的项目集之间的关系画出DFA 和LR0分析表,其中LR0构造方法如下:(5) 对具体的句子运用LR0分析的方法如下: 每一项ACTIONs,a 所规定的四种动作:1. 移进 把s,a 的下一状态s’和输入符号a 推进栈,下一输入符号变成现行输入符号.2. 归约 指用某产生式A →β进行归约. 假若β的长度为r, 归约动作是, 去除栈顶r 个项,使状态s m-r 变成栈顶状态,然后把s m-r, A 的下一状态s’=GOTOs m-r, A 和文法符号A 推进栈.3. 接受即acc 宣布分析成功,停止分析器工作.4. 报错 考题:构造文法GE 的LR0分析表,并给出accd 的分析过程; 0S→E1E →aA 2E →bB 3A →cA 4 A →d 5B →cB 6B →d分析:题中已经进行了推广文法,所以第一步就不需要了,下面就是开始构造识别活前缀的DFA,然后构造出LR0分析表,最后在进行分析,实际上对于accd 我们自己可以先推一下,EaAacAaccAaccd 所以该句子符合文法,那么最终构造出的LR0分析表对该句子进行分析后必定得到“acc ”接受的意思,否则构造的LR0分析表出错; 答:1构造识别活前缀的DFA:I 0=Closure{S→E }={ S→E , E→aA, E→bB } I1=GOI0,E=Closure{S→E }={ S→E }I 2=GOI 0,a=Closure{ E→aA }={ E→aA ,A→cA ,A→d } I 3=GOI 0,b=Closure{ E→bB }={E →bB, B→cB ,B→d }为了方便,下面计算中的Closure 不再写了,直接给出答案,考试时可以不写,当然计算I 0是必须要的I 4=GOI 2,A={ E→aA} I 5=GOI 2,c={ A→cA ,A→cA ,A→d } I 6= GOI 2,d={ A→d} I 7=GOI 3,B ={ E→bB}I 8= GOI 3,c= { B→cB ,B→cB ,B→d } I 9= GOI 3,d={ B→d} I 10= GOI 5,A ={ A→cA } GOI 5,c=I 5 GO=I 6 I 11= GOI 8,B { B→cB } GOI 8,c=I 8 GO=I 9 画出DFA:注:实际上构造LR0分析表时这个图没有必要画,根据上述计算结果即可填写下表; 2画出LR0分析表注:至于怎么填这个表请参见上一页中的PPT,这里不再赘述,Action 表中si 代表跳转到第i 个状态,ri 代表选择文法中第i 条规则进行归约,acc 代表接受,即分析成功;Goto 表中数字i 代表跳转到第i 个状态; (3)对accd 进行分析逆波兰式和四元式是三地址代码的两种记录表现形式,当然表示形式还有三元式、间接三元式等等,根据老师的意思应该不考,四元式和逆波兰式必考;1逆波兰表达式逆波兰表达式即后缀表达式,就是中缀表达式也就是我们一般看到的表达式形式对应的后续遍历结果,这个方法有很多,个人认为搞清楚运算优先级,观察一下就可写出,先算谁就将其对应的操作数写出,运算符放在后面就行很简单:例如:写出下列各式的逆波兰表示1 -a-bc/c-d + -ba2 -A+BC↑ D/E/F解: 1 abccd-/ba+ - 2 ABCDE/↑F/+注:代表负号“-”2四元式四元式形式如下op,arg1,arg2,Result从左至右分别代表运算符,第一操作数,第二操作数,运算结果;如:A + B C - D + E / C - D ^N 对应的四元式序列如下:四元式 : 1 - ,C ,D,T1 2 ,B,T1,T23 + ,A,T2,T34 - ,C,D,T45 ^ ,T4,N,T56 / ,E ,T5,T67 + ,T3 ,T6 ,T7注:T1,T2等等位存放结果的临时变量;条件语句等四元式的表示jnz , a ,-- , p 表示 if a goto pjrop, x , y, p 表示 if x rop y goto prop代表关系运算符,如<,>等等j , --, --- , p 表示 goto p例如:写出条件语句 IF a>0 THEN x:=x+1 ELSE x:=4 x- 1 四元式序列解:1 j > , a ,0 ,32 j , -, -,63+,x , 1 , T14 := , T1,-, T25j ,-, -,96 -, x,1, T37 , 4 ,T3 ,T48 := , T4 ,-,x9注意:5和9不能写丢,否则一分没有上述四元式中第二第三个位置的“-”代表没有元素;其实四元式就是对上述程序进行解释,如果满足则跳转到哪里执行,不满足则跳转到哪里执行,大家自己分析一下,应该能够看懂;考题:根据要求写出下列表达式的中间形式;15+6a+b写出表达式的逆波兰式逆波兰表达式为:56ab++2注意:同上题,本题答案加红色的部分此外上述编号随意,从0开始也行从100开始也行;不能丢,否则一分没有9、参数传递这种题目很简单,是送分题,一定要做对参数传递方式分为三种,值传递,地址传递和传名;值传递过程中形参值的改变不会影响实参值的改变,地址传递形参值的改变导致对应是实参值的改变,传名传递类似于C语言中的宏展开,将实参原封不动的替换相应的形参文字替换;请看下题:(1)高级语言程序中常用的参数传递方式有哪些请根据这些传递方式写出程序的运行结果;static int a=1;int pint x,int y,int z {y=y+1;z=z+x;cout<<"In P "<<a<<endl; } int main{int a=2;int b=3;pa,a,a;cout<<"In main "<<a<<endl; return 0;}分析:函数p中输出地a的值是全局变量a的值,与主函数中的局部变量a无关,不要被迷惑住,所以p中输出的a就是1.传值时,由于实参值不受影响,所以a仍为2;传地址时,在函数P中,将实参代入后a=a+1得a=3;再由a=a+a得到a=6;传名时,直接将实参带入形参,原来程序被替换为:a=a+1;a=a+a;将a=2代入得到结果为6.答:①C语言中函数传递的方式有1传值 2传地址 3传名②运行结果:1传值方式:In P 1In main 2 2传地址:In P 1In main 63传名: In P 1In main 62Procedure p x,y,z ; beginy:=y+1;z:=z+x;end; {p} begina:=2;b:=3;pa+b , a , a print a end.传值传递时输出结果为: 2 实参值不受影响,a=2传地址传递时输出结果为:8 a=2+1=3;a=3+5=8传名传递时输出结果为:9 a=a+1;a=a+a+b;得到a=2+1=3;a=3+3+3=910、程序分块、画DAG图这个也比较简单,具体方法如下:(1)分块就是将程序分成一块块的,主要就是确定每一块的入口语句:1寻找入口语句的方法:满足以下条件之一的都是入口语句a程序的第一条语句;b条件转移语句或无条件转移语句可以转移到的语句c紧跟在条件转移语句后面的语句2对每一入口语句,构造其所属的基本块;它是由该语句到下一入口语句不包括下一入口语句,或到一转移语句包括该转移语句,或到一停语句包括该停语句之间的语句序列组成的;3凡未被纳入某一基本块的语句,都是程序中控制流程无法到达的语句,因而也是不会被执行到的语句,我们可以把它们删除;根据基本块画DAG图上述图中的DAG只给出了最后完整的结果,老师要求在考试中需要把每一步都体现出来,具体请参见书上284页,因为篇幅限制所以不再赘述;另外,根据老师的意思可能会将DAG和四元式结合在一起考,给一段程序,先写出其四元式然后在画出其DAG图,四元式与DAG对应关系如下:根据下面的对应关系,DAG图很容易画出来;。
编译原理期末复习题(包含上一份N多答案)
编译原理期末复习题(包含上一份N多答案)编译原理复习题一、填空题: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个输入符号)。
编译原理-复习资料精选全文完整版
可编辑修改精选全文完整版1.编译程序的工作过程一般可包括词法分析、语法分析、语义分析、中间代码产生与优化和目标代码生成等几个阶段,同时还有表格管理和出错处理。
2.LEX是用于词法分析的工具,Y ACC是用于语法分析的工具。
3.解释程序和编译程序的区别在于是否生成目标代码。
4.任一文法终结符集合和非终结符集合的交集是空集。
5.描述程序设计语言语法的BNF方法中,“::=”表示定义为,“|”表示或,[W]表示W可出现0或1次,{W}表示W可出现n(n≥0)次。
6.已知文法G[G]: S→aSb|ab|ε,该文法描述的语言L(G)={a n b n|n≥0}。
7.单词的描述工具有正规文法、正规式和有穷自动机,他们之间存在等价性。
8.高级程序设计语言的单词通常分为五类,它们是关键字、标识符、常数、运算符和界符。
9.正则式中的“|“表示或,“*”表示闭包。
10.自顶向下语法分析方法会遇到的主要问题有回溯,以及左递归带来的无限循环。
11.算符优先分析法每次归约当前句型的最左素短语,规范归约中每次归约的是当前句型的句柄。
12.对文法G[G]: S→a|b|cTc,T→S|TdS而言,FIRSTVT(T)={a,b,c,d}。
13.活前缀是指规范句型的一个前缀,这种前缀不含句柄之后的任何符号。
14.对文法G[G]: E→E*T|T, T→T+i|i的句子1+2*8+6进行归约后的结果为42(23,42)。
15.在LR(0),SLR(1),LR(1),LALR(1),四种文法中,描述能力最强的是LR(1)。
1.0型文法中每条规则左部至少包含一非终结符(√)。
2.3型文法一定是2型、1型、0型文法(√)。
3.对无二义性文法而言,无论最左推导还是最右推导,同一个句子的语法树是一样的。
4.若一个文法是递归的,则其语言中句子的个数必定是无穷个。
(√)5.文法规则右部的符号一定是终结符。
(×)6.语法树描述的是一个文法。
编译原理复习(有答案)
第一章引论1.编译过程的阶段由词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成六个阶段2.编译程序的概念3.编译程序的结构例:〔B〕不是编译程序的组成局部。
A. 词法分析器;B. 设备管理程序C. 语法分析程序;D. 代码生成程序4.遍的概念对源程序(或其中间形式)从头至尾扫描一次并进展有关加工处理,生成新的中间形式或最终目标程序,称为一遍。
5.编译程序与解释程序的区别例:解释程序和编译程序是两类程序语言处理程序,它们的主要区别在于〔D〕。
A. 单用户与多用户的差异B. 对用户程序的过失能力C. 机器执行效率D. 是否生成目标代码第三章文法和语言文法的概念字母表、符号串和集合的概念与运算例:(ab|b)*c 与下面的那些串匹配?〔ACD〕A. ababbc;B. abab;C. c;D. babc;E. aaabc例:ab*c*(a|b)c 与后面的那些串匹配?〔BC〕A.acbbcB.abbcacC.abcD.acc例:(a|b)a+(ba)*与后面的那些串匹配? 〔ADE〕A.baB.bbaC.ababaD.aaE.baa文法的定义〔四元组表示〕文法G定义为四元组〔V N,V T,P,S〕V N:非终结符集V T:终结符集P:产生式〔规那么〕集合S:开场符号〔或识别符号〕例:给定文法,A::= bA | cc,下面哪些符号串可由其推导出〔①② ⑤〕。
①cc ②b*cc ③b*cbcc ④bccbcc ⑤bbbcc什么是推导例:文法G:E->E+T|E-T|TT->T*F|T/F|FF->(E)|i试给出下述表达式的推导:i*i+i推导过程:E->E+T->T+T->T*F+T->F*F+T->i*F+T->i*i+T->i*i+F->i*i+i●句型、句子的概念例:假设G一个文法,S是文法的开场符号,如果S=>*x,那么称x是句型。
编译原理期末考试复习题(含答案)
编译原理期末考试复习题(含答案)一、选择题1.代码生成阶段的主要任务是(C)。
A.把高级语言翻译成汇编语言B.把高级语言翻译成机器语言C.把中间代码变换成依赖具体机器的目标代码D.把汇编语言翻译成机器语言2.文法G 所描述的语言是( C )的集合。
A.文法G 的字母表V 中所有符号组成的符号串B.文法G 的字母表V 的闭包V* 中的所有符号串C.由文法的开始符号推出的所有终结符串D.由文法的开始符号推出的所有符号串3.语言是(C)。
A.终结符与非终结符的符号串的集合B.非终结符符号串的集合C.终结符符号串的集合D.产生式的集合4.常用的中间代码形式不含(D)。
A.三元式B.四元式C.逆波兰式D.语法树5.四元式之间的联系是通过(B)实现的。
A.指示器B.临时变量C.符号表D.程序变量6.词法分析器的输出结果是( C )。
A.单词的种别编码B.单词在符号表中的位置C.单词的种别编码和自身值D.单词自身值7.表达式(┐A∨B)∧(C∨D)的逆波兰表示为(B)。
A. ┐AB∨∧CD∨B.A┐B∨CD∨∧C.AB∨┐CD∨∧ D.A┐B∨∧CD∨8.下推自动机识别的语言是( C )A.0型语言 B.1型语言C.2型语言 D.3型语言9. 在规范归约中,用(B)来刻画可归约串。
A.直接短语 B.句柄C.最左素短语 D.素短语10.词法分析器用于识别( C)。
A.字符串 B.语句 C.单词 D.标识符11.一个句型中称为句柄的是该句型的最左(D)A.非终结符号 B.短语 C.句子 D.直接短语12.文法 G[E] :E→T∣E+TT→F∣T * FF→a∣(E)该文法句型 E + F * (E + T) 的简单短语是下列符号串中的(B)。
①(E+T)②E+T ③F ④ F * (E+T)A.①和③B.②和③C.③和④D.③13.通常一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括(C)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Please construct a DFA with minimum states for the following regular expression. ((ab*)(a|b)*)*(a|b)(a|b)*
Review 6.Important knowledge points • Chapter 4 – Top-down Parsing • Recursive descent parsing • Predictive parsing
Review 6.Important knowledge points • Chapter 4 – Ambiguous Grammar parsing • Additional conditions
– Associated law and precedence – Dangle rules – Parsing an ambiguous grammar in LR parsing method with additional conditions
Review 6.Important knowledge points • Chapter 6 – Type – Type expression • Construct a type expression for a declaration
Review 6.Important knowledge points • Chapter 7 – Stack-based storage allocation • Activation Record Form • C language program
Please construct a LR(1) parsing table for the following ambiguous grammar with your own defined additional conditions (You determine the required additional conditions by yourself).
Please eliminate the left recursions (if there are) and extract maximum common left factors (if there are) from the following context free grammar, and then decide the resulted grammar is whether a LL(1) grammar by constructing the related LL(1) parsing table. Sif E then S|if E then S else S|while E do S|a EE and F|F FF or G|G G(E)|b
– Recursive function
• Pascal language program
– Display
• Construct a maximum stack map for a C recursive program
We assume that the storage organization and the form of activation record used in C language program run-time stack storage allocation are as above. Please construct the run-time stack map when it gets the maximum size for the following C program. The C program is as the following: #include <stdio.h> int x,y,z; int main() { x=35; y=40; z=f(x,y); } int f(int m, int n) { if (n>m) { int t; t=f(n,m); return t } else if (n==0) return m; else { int t1,t2; t1=m % n; //remainder of m/n t2=f(n,t1); return t2 } } Notes: 1) Here we assume that the caller’s sp of Main function is the start address of global variable data area, and the returned address in the activation record of a function (including Main function) is filled by the operating system automatically, you might not care it. 2) The initial value of variable X and Y are 35 and 40 respectively, the start address of stack used in the program is K.
Please construct context-free grammars with -free production for the following language. L={| (a,b,c,d)* and the numbers of a’s and b’s and d’s occurred in are odd, and starts with a , ends with b}
Review 5.Form of examination • Closed (Cannot refer to any other materials)
Review
6.Important knowledge points • Chapter 2 – Chomsky Grammar and related Automation – Construct a context-free grammar without production from a language • All strings of a’s and b’s with an even number of a’s and an odd number of b’s • Strings of a’s and b’s with an equal number of a’s and b’s • Embedded grammar • Combination of regular grammar and embedded grammar
EE and E|E or Байду номын сангаас|not E|(E)|b
Review
6.Important knowledge points • Chapter 5 – Attribute – Annotated parsing tree • Construct an annotated parsing tree for an expression (S-attribute) – Syntax-directed definition – S-attribute Grammar and evaluation of S-attribute • Construct semantic rules for a S-attribute grammar
Review 4.Forms of problems in the examination paper • Similar to the exercises finished by you • Without any the form of choosing answers or judgment
Review 1.Structure of the course
Grammar & Language Lexical Analysis Syntax Analysis Semantic Analysis RG & DFA Top-down LL(1) Parsing Bottom-Up Precedence and LR Layered Automation Attribute Grammar Type Checking
– LL(1)
• LL(1) Parsing table construction
– Elimination of left recursion
» First direct, Next indirect recursion
– Factoring – First &Follow – Show a CFG grammar is whether a LL(1) grammar by constructing the related parsing table
Review 2.Scope of reviewing • From Chapter 2-Chapter 9
Review 3.Methods of reviewing • Understanding basic concept, principles deeply • Being able to do exercises • Understanding the process by drawing the graph or the flow • Remembering after understanding
Review 6.Important knowledge points • Chapter 4 – Bottom-up Parsing • LR parsing
– SLR(1) -- Follow – LR(1) – Predictive symbol – LALR –Merging states with the same core – Show a CFG grammar is whether a LR grammar by constructing the related parsing table