编译原理期末试题
- 格式:pdf
- 大小:370.72 KB
- 文档页数:8
编译原理期末考试试题及答案一、选择题(每题2分,共20分)1. 编译器的前端主要负责以下哪项工作?A. 代码优化B. 目标代码生成C. 词法分析和语法分析D. 运行时支持2. 词法分析器的主要任务是什么?A. 识别语法结构B. 识别词法单元C. 构建语法树D. 代码优化3. 语法分析中,使用哪种方法可以避免回溯?A. 递归下降分析B. LR分析C. LL分析D. 自顶向下分析4. 下列哪个选项不是中间代码的形式?A. 三地址代码B. 四元组C. 抽象语法树D. 汇编语言5. 代码优化的目标不包括以下哪项?A. 提高代码执行速度B. 减少程序占用的内存C. 增加程序的可读性D. 减少程序的执行时间二、简答题(每题10分,共30分)1. 简述编译器的主要组成部分及其功能。
2. 解释什么是语法制导翻译,并举例说明其在编译过程中的应用。
3. 描述静态作用域规则和动态作用域规则的区别。
三、计算题(每题15分,共30分)1. 给定一个简单的算术表达式 `3 + (4 * 5) - 2`,请使用逆波兰表示法表示,并说明其转换过程。
2. 假设有一个简单的文法如下:```S -> A BA -> a A | εB -> b B | ε```请写出使用该文法生成字符串 "ab" 的所有派生树。
四、论述题(每题20分,共20分)1. 论述编译器中代码优化的重要性,并举例说明常见的优化技术。
参考答案一、选择题1. C2. B3. B4. D5. C二、简答题1. 编译器的主要组成部分包括前端、中端和后端。
前端负责词法分析和语法分析,中端进行语义分析和中间代码生成,后端则负责代码优化和目标代码生成。
2. 语法制导翻译是一种基于文法规则的翻译技术,它将源程序的语法结构映射到相应的语义操作上。
例如,在编译过程中,语法制导翻译可以用于将源代码中的条件语句转换为中间代码中的跳转指令。
3. 静态作用域规则是指变量的作用域在编译时确定,而动态作用域规则是指变量的作用域在运行时确定。
《编译原理》期末试题(一)一、是非题(请在括号内,正确的划√,错误的划×)(每个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.将编译程序分成若干个“遍”是为了_B__。
A . 提高程序的执行效率B.使程序的结构更加清晰C. 利用有限的机器内存并提高机器的执行效率D.利用有限的机器内存但降低了机器的执行效率2.正规式 MI 和 M2 等价是指__C__。
A . MI 和 M2 的状态数相等 B.Ml 和 M2 的有向弧条数相等。
C .M1 和 M2 所识别的语言集相等 D. Ml 和 M2 状态数和有向弧条数相等3.中间代码生成时所依据的是 _C_。
A.语法规则 B.词法规则 C.语义规则 D.等价变换规则4.后缀式 ab+cd+/可用表达式__B_来表示。
A. a+b/c+d B.(a+b)/(c+d) C. a+b/(c+d) D. a+b+c/d6.一个编译程序中,不仅包含词法分析,_A____,中间代码生成,代码优化,目标代码生成等五个部分。
A.( ) 语法分析 B.( )文法分析 C.( )语言分析 D.( )解释分析7.词法分析器用于识别__C___。
A.( ) 字符串 B.( )语句 C.( )单词 D.( )标识符8.语法分析器则可以发现源程序中的___D__。
A.( ) 语义错误 B.( ) 语法和语义错误C.( ) 错误并校正 D.( ) 语法错误9.下面关于解释程序的描述正确的是__B___。
(1) 解释程序的特点是处理程序时不产生目标代码(2) 解释程序适用于 COBOL 和 FORTRAN 语言(3) 解释程序是为打开编译程序技术的僵局而开发的A.( ) (1)(2) B.( ) (1) C.( ) (1)(2)(3) D.( ) (2)(3)10.解释程序处理语言时 , 大多数采用的是__B___方法。
A.( ) 源程序命令被逐个直接解释执行B.( ) 先将源程序转化为中间代码 , 再解释执行C.( ) 先将源程序解释转化为目标程序 , 再执行D.( ) 以上方法都可以11.编译过程中 , 语法分析器的任务就是__B___。
编译原理期末试题及答案2、写出表达式a+b*(c-d)/e的逆波兰式和三元序列。
3、写出表达式a:=(b+c)*e+(b+c)/f的逆波兰式和三元序列。
4、已知⽂法G(S)及相应翻译⽅案S→aAb {print “1”}S→a {print “2”}A→AS {print “3”}A→c {print “4”}输⼊acab, 输出是什么5、已知⽂法G(S)S→bAaA→(B | aB→Aa)写出句⼦b(aa)b的规范归约过程。
6、已知⽂法G[S]S→S*aF | aF | *aFF→+aF | +a消除⽂法左递归。
1、设⽂法G(S):S→^ | a | (T)T→T,S | S⑴消除左递归;⑵构造相应的FIRST和FOLLOW集合;⑶构造预测分析表2.语句if E then S(1) 改写⽂法,使之适合语法制导翻译;(2) 写出改写后产⽣式的语义动作。
4.设某语⾔的for语句的形式为for i:=E(1) to E(2) do S其语义解释为i:=E(1)LIMIT:=E(2)again: if i<=LIMIT thengoto againEnd;(1)写出适合语法制导翻译的产⽣式;(2)写出每个产⽣式对应的语义动作。
7.已知⽂法G(S)S→a | ^ | (T)T→T,S | S(1) 给出句⼦(a,(a,a))的最左推导;(2) 给出句型((T,S),a)的短语, 直接短语,句柄。
8.对于C 语⾔do S while E语句(1)改写⽂法,使之适合语法制导翻译;(2)写出改写后产⽣式的语义动作。
9.已知⽂法G(S)S→aAcBeA→Ab| bB→d(1)给出句⼦abbcde的最左推导及画出语法树;(2)给出句型aAbcde的短语、素短语。
10.设⽂法G(S):S→(T) | aS | aT→T,S | S⑴消除左递归和提公共左因⼦;⑵构造相应的FIRST和FOLLOW集合;⑶构造预测分析表。
第 0 页共 16 页一.填空题(每空2分,共20分) 1. 不同的编译程序关于数据空间的存储分配策略可能不同,但大部分编译中采用的方案有两种:静态存储分配方案和动态存储分配方案,而后者又分为(1)和(2)。
2. 规范规约是最(3)规约。
3. 编译程序的工作过程一般划分为5个阶段:词法分析、(4)、语义分析与中间代码生成,代码优化及(5)。
另外还有(6)和出错处理。
4.表达式x+y*z/(a+b)的后缀式为(7)。
5.文法符号的属性有综合属性和(8)。
6.假设二位数组按行存放,而且每个元素占用一个存储单元,则数组a[1..15,1..20]某个元素a[i ,j]的地址计算公式为(9)。
7.局部优化是局限于一个(10)范围内的一种优化。
二.选择题(1-6为单选题,7-8为多选题,每问2分,共20分)1. 一个上下文无关文法G 包括四个组成部分:一组终结符,一组非终结符,一个(),以及一组()。
A .字符串B .产生式C .开始符号D .文法2.程序的基本块是指()。
A .一个子程序B .一个仅有一个入口和一个出口的语句C .一个没有嵌套的程序段D .一组顺序执行的程序段,仅有一个入口和一个出口 3. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于()分析方法。
A .自左向右 B .自顶向下 C .自底向上 D .自右向左 4.在通常的语法分析方法中,()特别适用于表达式的分析。
A .算符优先分析法 B . LR 分析法 C .递归下降分析法 D . LL (1)分析法 5.经过编译所得到的目标程序是()。
A .四元式序列B .间接三元式序列C .二元式序列D .机器语言程序或汇编语言程序 6.一个文法所描述的语言是();描述一个语言的文法是()。
A .唯一的 B .不唯一的 C .可能唯一,也可能不唯一7.如果在文法G 中存在一个句子,当其满足下列条件()之一时,则称该文法是二义文法。
编译原理与技术模拟试题二一、填空题(20分,每空2分)1.1LR(1)分析法中,L的含义是,R的含义是。
答案:自左至右扫描输入串,最右推导的逆解释:若为文法G构造的移进-归约分析表中不含多重定义的条目,则称G为LR(k)文法,分析器被称为是LR(k)分析器,它所识别的语言被称为LR(k)语言。
L表示从左到右扫描输入序列,R表示逆序的最右推导,k表示为确定下一动作向前看的终结符个数,一般情况下k<=1。
当k=1时,简称LR。
1.2源程序经过编译后产生的程序称为。
答案:目标程序解释:源程序经过编译后产生的程序称为目标程序。
1.3词法分析的输出由和两部分组成。
答案:单词种别,单词的值解释:根据构词规则识别称为源程序的输入序列,称为词法分析。
词法分析阶段是编译过程的第一阶段,这个阶段的任务是对源程序从前到后(从左到右)逐个字符地扫描,从中识别出一个个“单词”符号。
“单词”符号是程序设计语言的基本语法单位,如关键字(或称保留字)、标识符、常数、运算符和分隔符(如标点符号、左右括号)等。
词法分析程序输出的“单词”常以二元组的方式输出,即单词种别和单词自身的值。
1.4文法G:S→AB,A→aA|ε,B→bBc|bc描述的语言L(G)=。
答案:{a m b k c k|m>=1,k>=0}解释:通过推导进行分析。
1.5允许用户随意地动态申请与释放内存空间应采用存储分配技术。
答案:堆解释:编译器怎样对存储空间进行组织和采用什么样的存储分配策略,很大程度上取决于程序设计语言中所采用的机制。
编译器具体实现时,根据语言机制的特性,采用静态分配策略、栈分配策略和堆分配策略三种方式的其中若干种。
静态分配策略是指编译时安排所有数据对象的存储,即绑定是静态确定的;栈分配策略是指按栈的方式管理运行时的存储;堆分配策略是指在运行时根据要求从堆数据区动态地分配和释放存储。
1.6一个文法产生的_______________________称为该文法的语言。
编译原理期末考试题(含答案)1. 请简要解释编译原理的定义和作用。
编译原理是研究将高级语言源程序转化为等价的目标程序的一门学科。
它的主要作用是将高级语言的源代码翻译为计算机能够执行的目标代码,从而实现程序的运行。
2. 请列举并解释编译过程的各个阶段。
- 词法分析:将源代码划分为一个个词法单元,如变量、关键字等。
- 语法分析:根据语法规则,将词法单元组合为语法树,检查语法结构是否正确。
- 语义分析:对语法树进行语义检查,如类型匹配、作用域等。
- 中间代码生成:将语法树转化为中间代码表示形式,方便后续优化。
- 代码优化:对中间代码进行优化,提高程序执行效率。
- 目标代码生成:将优化后的中间代码转化为目标机器代码。
3. 请解释符号表在编译过程中的作用。
符号表是编译器在编译过程中用来管理变量、函数、类型等标识符的数据结构。
它的主要作用是记录标识符的相应属性,如类型、作用域等,以便在后续的语法、语义分析以及代码生成过程中进行查找、检查等操作。
4. 请简要解释LL(1)文法的定义和特点。
LL(1)文法是一种上下文无关文法,它具有以下特点:- 对于给定的非终结符,它的产生式右部的首符号不相同。
- 对于给定的产生式右部的首符号,它的产生式右部不相同。
- 通过向前查看一个符号,就能确定所选用的产生式。
5. 请简要解释词法分析器的作用和实现方式。
词法分析器的主要作用是将源代码分解为一个个词法单元,如变量名、关键字等。
它的实现方式一般采用有限自动机,通过定义正则表达式描述各个词法单元的模式,然后根据模式匹配的结果生成相应的词法单元。
答案仅为参考,请以实际考试为准。
编译原理期末试题及答案一、选择题(每题2分,共20分)1. 编译器的主要功能是将()代码转换成()代码。
A. 高级语言,低级语言B. 高级语言,机器语言C. 汇编语言,机器语言D. 机器语言,汇编语言答案:B2. 编译过程中,词法分析的输出是()。
A. 语法树B. 语法分析表C. 词法单元D. 抽象语法树答案:C3. 在编译原理中,语法分析通常采用()方法。
A. 递归下降分析B. 动态规划C. 贪心算法D. 回溯算法答案:A4. 语义分析的主要任务是()。
A. 检查语法错误B. 生成中间代码C. 检查语义错误D. 优化代码答案:C5. 编译器的优化通常发生在()阶段。
A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:D6. 编译器的前端主要负责()。
A. 代码生成B. 代码优化C. 语法分析D. 目标代码生成答案:C7. 编译器的后端主要负责()。
A. 代码生成B. 代码优化C. 语法分析D. 词法分析答案:A8. 编译原理中,LL(1)分析方法的特点是()。
A. 左到右,最右推导B. 左到右,最左推导C. 右到左,最右推导D. 右到左,最左推导答案:B9. 编译原理中,LR(1)分析方法的特点是()。
A. 左到右,最右推导B. 左到右,最左推导C. 右到左,最右推导D. 右到左,最左推导答案:B10. 编译原理中,语法制导翻译的主要思想是()。
A. 根据语法树的结构进行翻译B. 根据词法单元进行翻译C. 根据语法分析表进行翻译D. 根据语义分析表进行翻译答案:A二、填空题(每题2分,共20分)1. 编译器中,用于表示语法规则的产生式通常由非终结符、产生符号和()组成。
答案:产生式右侧2. 在编译原理中,一个文法是()的,如果它的任何两个产生式都不会导致相同的句柄。
答案:无二义性3. 编译器的词法分析阶段通常使用()算法来识别和分类词法单元。
答案:有限自动机4. 语法分析阶段,如果一个文法是左递归的,编译器需要使用()技术来消除左递归。
<编译原理>历年试题及答案一.(每项选择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、编译程序是一种( )。
A.汇编程序B.目标程序C.翻译程序D.解释程序正确答案:C2、若文法G定义的语言是无限集,则文法必然是( )。
A.二义性的B.上下文无关的C.递归的D.无二义性的正确答案:C3、一个上下文无关文法G包括四个组成部分,它们是一组非终结符号,一组终结符号,一个开始符号,以及一组( )。
A.句子B.单词C.产生式D.句型正确答案:C4、文法G:S →x xS | y 所识别的语言是( )。
A.xxy∗B. xx∗yxC.(xxy)∗D.(xx)∗y正确答案:D5、文法G:S →xS | y 所识别的语言是( )。
A.(xy)∗B.xy∗C.x∗yD. xx∗yx正确答案:C6、在自上而下的语法分析中,应从( )开始分析。
A.句型B.句子C.文法开始符号D.句柄正确答案:C7、语法分析器的输入是()。
A.符号表B.目标程序C.源程序D.Token序列正确答案:D8、LL(1)分析法中“1”的含义是在输入串中查看一个输入符号,其目的是()。
A.确定最左推导B.确定是否推导C.确定句柄D.确定使用哪一个产生式进行展开正确答案:D9、同正规式(a|b)∗等价的正规式为( )。
A.a∗|b∗B.(a|b)+C.(ab)∗D.(a∗|b∗)+正确答案:D10、已知文法G[S]:S→A1,A→A1|S0|0,与G等价的正规式是( )。
A.1∗|0∗1B.0(1|10)∗1C.0(0|1)∗D.1(10|01)∗0正确答案:B11、与(a|b)∗(a|b)等价的正规式是( )。
A.a∗|b∗B.(ab)∗(a|b)C.(a|b)(a|b)∗D.(a|b)∗正确答案:C12、如果一个正规式所代表的集合是无穷的,则它必含有的运算是( )。
A.接运算“·”B.或运算“|”C.括号“(”和“)”D.闭包运算“* ”正确答案:D13、在语法分析处理中,FIRST集合、FOLLOW集合均是( )。
编译原理期末考试试题一、选择题(每题2分,共20分)1. 在编译原理中,词法分析器的作用是将源程序的字符序列转换为______。
A. 语法树B. 抽象语法树C. 标记D. 语义分析树2. 以下哪个不是编译器的组成部分?A. 词法分析器B. 语法分析器C. 代码生成器D. 操作系统3. 编译过程中的语义分析阶段主要完成的任务是______。
A. 检查语法结构的正确性B. 检查类型正确性C. 优化代码D. 生成目标代码4. 以下哪个是自顶向下的语法分析方法?A. LR分析B. LL分析C. CYK算法D. 递归下降分析5. 编译器优化中,哪些属于局部优化?A. 公共子表达式消除B. 死代码消除C. 循环展开D. 全局变量优化6. 在编译原理中,属性文法用于描述______。
A. 语法规则B. 词法规则C. 语义规则D. 代码生成规则7. 静态作用域规则和动态作用域规则的主要区别在于______。
A. 变量的存储方式B. 变量的查找方式C. 变量的生命周期D. 变量的类型检查8. 编译器中的代码生成阶段主要负责将______转换为目标代码。
A. 源代码B. 语法树C. 抽象语法树D. 中间代码9. 编译器中的符号表用于存储______。
A. 语法错误信息B. 语义错误信息C. 程序变量和常量信息D. 程序的执行结果10. 在编译原理中,词法单元的集合称为______。
A. 词法规则B. 词法分析C. 词法符号D. 词法文法二、简答题(每题10分,共30分)1. 简述编译器的五个主要阶段,并简要描述每个阶段的主要任务。
2. 解释什么是语法分析树,并说明它与抽象语法树的区别。
3. 描述代码优化的目的,并给出一个简单的代码优化示例。
三、计算题(每题25分,共50分)1. 给定一个简单的算术表达式,如“a + b * c - d”,并假设变量a, b, c, d均已在符号表中定义。
请写出一个简单的词法分析器算法,将该表达式转换为标记序列。
一、填空题| (每题4分,共20分)1.乔母斯基定义的3型文法(线性文法)产生式形式A Ba|a,或A aB|a, A, B € Vn, a,b € Vt 。
2.语法分析程序的输入是单词符号,其输出是语法单位。
3型为B .aB的LR(0)项目被称为移进项目,型为B a.B的LR (0) 项目被称为待约项目,4. 在属性文法中文法符号的两种属性分别为继承属性和综合属性。
5、运行时存贮管理方案有静态存储分配、动态存储分配和堆式存储分配和方案。
二.已知文法G(S)⑴ E T | E+T⑵ T F | F*F⑶ F (E) | i(1)写出句型(T*F+i)的最右推到并画出语法树。
(4分)(2)写出上述句型的短语,直接短语和句柄。
(4分)答:(1)最右推到(2分)E ==> T ==>F ==> (E) ==> (E+T) ==> (E+F) ==> (E+i) ==> (T+i) ==> (T*F+i)(2)语法树(2分)IS/|\7i\E+T(3)(4 分)短语:(T*F+i ) ,T*F+i ,T*F,i直接短语:T*F,i句柄:T*F三.证明文法G(S) : S SaS | £是二义的。
(6分) 答:句子aaa对应的两颗语法树为:因此,文法是二义文法四.给定正规文法G( S):(1) S Sa | Ab |b ⑵A Sa请构造与之等价的DFA ( 6分) 答:对应的NFA 为: (6分)a b {F}① {S} {S}{S,A} ①{S,A} {S,A} {S}五•构造识别正规语言b*a(bb*a)*b* 最小的DFA(要求写出求解过程)。
(15分) 答:(1)对应的NFA(5分)a b{0}{1 , 3} {0} {1,3} ① {2 , 3} {2,3} {1,3}{2,3}六.已知文法G(S):(1) S A | a | (T)⑵ T T,S | S试:(1)消除文法的左递归;(4分)(2) 构造相应的first 和follow 集合。
编译原理期末考试复习题(含答案)一、选择题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)。
《编译原理》期末试题(一)一、是非题(请在括号内,正确的划√,错误的划×)(每个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、试为表达式 w+(a+b)*(c+d/(e-10)+8) 写出相应的逆波兰表示。
2、写出表达式a+b*(c-d)/e的逆波兰式和三元序列。
3、写出表达式a:=(b+c)*e+(b+c)/f的逆波兰式和三元序列。
4、已知文法G(S)及相应翻译方案S→aAb {print “1”}S→a {print “2”}A→AS {print “3”}A→c {print “4”}输入acab, 输出是什么?5、已知文法G(S)S→bAaA→(B | aB→A a)写出句子b(aa)b的规范归约过程。
6、已知文法G[S]S→S*aF | aF | *aFF→+aF | +a消除文法左递归。
1、设文法G(S):S→^ | a | (T)T→T,S | S⑴ 消除左递归;⑵ 构造相应的FIRST和FOLLOW集合;⑶ 构造预测分析表2.语句 if E then S(1) 改写文法,使之适合语法制导翻译;(2) 写出改写后产生式的语义动作。
4.设某语言的for语句的形式为for i:=E(1) to E(2) do S其语义解释为i:=E(1)LIMIT:=E(2)again: if i<=LIMIT thenBeginS;i:=i+1goto againEnd;(1)写出适合语法制导翻译的产生式;(2)写出每个产生式对应的语义动作。
7.已知文法G(S)S→a | ^ | (T)T→T,S | S(1) 给出句子(a,(a,a))的最左推导;(2) 给出句型((T,S),a)的短语, 直接短语,句柄。
8.对于 C 语言do S while E语句(1)改写文法,使之适合语法制导翻译;(2)写出改写后产生式的语义动作。
9.已知文法G(S)S→aAcBeA→Ab| bB→d(1)给出句子abbcde的最左推导及画出语法树;(2)给出句型aAbcde的短语、素短语。
10.设文法G(S):S→(T) | aS | aT→T,S | S⑴消除左递归和提公共左因子;⑵构造相应的FIRST和FOLLOW集合;⑶构造预测分析表。
编译原理期末试题一、单项选择题(共10小题,每小题2分)(题分20分)1.语言是A.句子的集合 B.产生式的集合C.符号串的集合 D.句型的集合2.编译程序前三个阶段完成的工作是A.词法分析、语法分析和代码优化B.代码生成、代码优化和词法分析C.词法分析、语法分析、语义分析和中间代码生成D.词法分析、语法分析和代码优化3.一个句型中称为句柄的是该句型的最左A.非终结符号 B.短语 C.句子 D.直接短语4.下推自动机识别的语言是A.0型语言 B.1型语言C.2型语言 D.3型语言5.扫描器所完成的任务是从字符串形式的源程序中识别出一个个具有独立含义的最小语法单位即A.字符 B.单词 C.句子 D.句型6.对应Chomsky四种文法的四种语言之间的关系是A.L0⊂L1⊂L2⊂L3 B.L3⊂L2⊂L1⊂L0C.L3=L2⊂L1⊂L0 D.L0⊂L1⊂L2=L37.词法分析的任务是A.识别单词 B.分析句子的含义C.识别句子 D.生成目标代码8.常用的中间代码形式不含A.三元式 B.四元式 C.逆波兰式 D.语法树9.代码优化的目的是A.节省时间 B.节省空间C.节省时间和空间 D.把编译程序进行等价交换10.代码生成阶段的主要任务是A.把高级语言翻译成汇编语言B.把高级语言翻译成机器语言C.把中间代码变换成依赖具体机器的目标代码D.把汇编语言翻译成机器语言二、填空题(本大题共5小题,每小题2分)(题分10分)1.编译程序首先要识别出源程序中每个( ),然后再分析每个( )并翻译其意义。
2.编译器常用的语法分析方法有( )和( )两种。
3.通常把编译过程分为分析前端与综合后端两大阶段。
词法、语法和语义分析是对源程序的( ),中间代码生成、代码优化与目标代码的生成则是对源程序的( )。
4.程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即:( )方案和( )方案。
5.对编译程序而言,输入数据是( ),输出结果是( )。
三、名词解释题(共5小题,每小题4分) (题分20分)1.词法分析2.LL(1)文法3.语法树4.LR(0)分析器5.语言和文法四、简答题(共4小题,每小题5分)(题分20分)1.编译程序和高级语言有什么区别?2.编译程序的工作分为那几个阶段?3.简述自下而上的分析方法。
4.简述代码优化的目的和意义。
五、综合应用题(共3小题,每小题10分)(题分30分)1.证明下述文法G:S→aSbS|aS|d是二义性文法。
2.对于文法G[S]:S→AB,A→Aa|bB,B→a|Sb求句型baSb的全部短语、直接短语和句柄?句型baSb的语法树如图五(2)所示。
SBA图五(2) 句型baSb的的语法树3.设有非确定的有自限动机NFA M=({A,B,C},{0,1},δ,{A},{C}),其中:δ (A,0)={C} δ (A,1)={A,B} δ (B,1)={C} δ (C,1)={C}。
请画出状态转换距阵和状态转换图。
参考答案一、单项选择题(共10小题,每小题2分,共20分)1.语言是A.句子的集合 B.产生式的集合C.符号串的集合 D.句型的集合2.编译程序前三个阶段完成的工作是A.词法分析、语法分析和代码优化B.代码生成、代码优化和词法分析C.词法分析、语法分析、语义分析和中间代码生成D.词法分析、语法分析和代码优化3.一个句型中称为句柄的是该句型的最左A.非终结符号 B.短语 C.句子D.直接短语4.下推自动机识别的语言是A.0型语言 B.1型语言C.2型语言 D.3型语言5.扫描器所完成的任务是从字符串形式的源程序中识别出一个个具有独立含义的最小语法单位即A.字符B.单词 C.句子 D.句型6.对应Chomsky四种文法的四种语言之间的关系是A.L0⊂L1⊂L2⊂L3 B.L3⊂L2⊂L1⊂L0C.L3=L2⊂L1⊂L0 D.L0⊂L1⊂L2=L37.词法分析的任务是A.识别单词 B.分析句子的含义C.识别句子 D.生成目标代码8.常用的中间代码形式不含A.三元式 B.四元式 C.逆波兰式D.语法树9.代码优化的目的是A.节省时间 B.节省空间C.节省时间和空间 D.把编译程序进行等价交换10.代码生成阶段的主要任务是A.把高级语言翻译成汇编语言B.把高级语言翻译成机器语言C.把中间代码变换成依赖具体机器的目标代码D.把汇编语言翻译成机器语言二、填空题(本大题共5小题,每小题2分,共10分)1.编译程序首先要识别出源程序中每个(单词),然后再分析每个(句子)并翻译其意义。
2.编译器常用的语法分析方法有(自底向上)和(自顶向下)两种。
3.通常把编译过程分为分析前端与综合后端两大阶段。
词法、语法和语义分析是对源程序的(分析),中间代码生成、代码优化与目标代码的生成则是对源程序的(综合)。
4.程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即(静态存储分配)方案和(动态存储分配)方案。
5.对编译程序而言,输入数据是(源程序),输出结果是(目标程序)。
三、名词解释题(共5小题,每小题4分,共20分)1.词法分析词法分析的主要任务是从左向右扫描每行源程序的符号,按照词法规则从构成源程序的字符串中识别出一个个具有独立意义的最小语法单位,并转换成统一的内部表示(token),送给语法分析程序。
2.LL(1)文法若文法的任何两个产生式A →α | β都满足下面两个条件:(1)FIRST(α) ∩ FIRST(β ) = φ;(2)若β⇒* ε,那么FIRST(α) ∩ FOLLOW( A ) = φ。
我们把满足这两个条件的文法叫做LL(1)文法,其中的第一个L代表从左向右扫描输入,第二个L表示产生最左推导,1代表在决定分析器的每步动作时向前看一个输入符号。
除了没有公共左因子外,LL(1)文法还有一些明显的性质,它不是二义的,也不含左递归。
3.语法树句子的树结构表示法称为语法树(语法分析树或语法推导树)。
给定文法G=(V N,V T,P,S),对于G的任何句型都能构造与之关联的语法树。
这棵树具有下列特征:(1)根节点的标记是开始符号S。
(2)每个节点的标记都是V中的一个符号。
(3)若一棵子树的根节点为A,且其所有直接子孙的标记从左向右的排列次序为A1A2…A R,那么A→A1A2…A R一定是P中的一条产生式。
(4)若一标记为A的节点至少有一个除它以外的子孙,则A∈V N。
(5)若树的所有叶节点上的标记从左到右排列为字符串w,则w是文法G的句型;若w中仅含终结符号,则w为文法G所产生的句子。
4.LR(0)分析器所谓LR(0)分析,是指从左至右扫描和自底向上的语法分析,且在分析的每一步,只须根据分析栈当前已移进和归约出的全部文法符号,并至多再向前查看0个输入符号,就能确定相对于某一产生式左部符号的句柄是否已在分析栈的顶部形成,从而也就可以确定当前所应采取的分析动作(是移进还是按某一产生式进行归约等)。
5.语言和文法文法就是语言结构的定义和描述,是有穷非空的产生式集合。
文法G定义为四元组的形式:G=(V N,V T,P,S)其中:V N是非空有穷集合,称为非终结符号集合;V T是非空有穷集合,称为终结符号集合;P是产生式的集合(非空);S是开始符号(或识别符号)。
这里,V N∩V T=∅,S∈V N。
V=V N∪V T,称为文法G的字母表,它是出现文法产生式中的一切符号的集合。
文法G所描述的语言用L(G)表示,它由文法G所产生的全部句子组成,即x}L(G)={x| S⇒*x,其中S为文法开始符号,且+∈T V简单的说,文法描述的语言是该文法一切句子的集合。
四、简答题(共4小题,每小题5分,共20分)1.编译程序和高级语言有什么区别?用汇编语言或高级语言编写的程序,必须先送入计算机,经过转换成用机器语言表示的目标程序(这个过程即编译),才能由计算机执行。
执行转换过程的程序叫编译程序。
汇编程序是指没有编译过的汇编语言源文件。
编译程序转换过的叫目标程序,也就是机器语言。
编译程序的工作情况有三种:汇编型、解释型和编译型。
汇编型编译程序用来将汇编语言编写的程序,按照一一对应的关系,转换成用机器语言表示的程序。
解释型编译程序将高级语言程序的一个语句,先解释成为一组机器语言的指令,然后立即执行,执行完了,取下一组语句解释和执行,如此继续到完成一个程序止。
用解释型编译程序,执行速度很慢,但可以进行人和计算机的"对话",随时可以修改高级语言的程序。
BASIC语言就是解释型高级语言。
编译型编译程序将级语言编写的程序,一次就会部翻译成机器语言表示的程序,而且过程进行很快,在过程中,不能进行人机对话修改。
FORTRAN 语言就是编译型高级语言。
2.编译程序的工作分为那几个阶段?词法分析、语法分析和语义分析是对源程序进行的分析(称为编译程序的前端), 而中间代码生成、代码优化和代码生成三个阶段合称为对源程序进行综合(称为 编译程序的后端),它们从源程序的中间表示建立起和源程序等价的目标程序。
3.简述自下而上的分析方法。
所谓自下而上分析法就是从输入串开始,逐步进行“归约”,直至归约到文法的 开始符号;或者说从语法树的末端开始,步步向上“归约”,直到根节点。
4.简述代码优化的目的和意义。
代码优化是尽量生成“好”的代码的编译阶段。
也就是要对程序代码进行 一种等价变换,在保证变换前后代码执行结果相同的前提下,尽量使目 标程序运行时所需要的时间短,同时所占用的存储空间少。
五、综合应用题(共3小题,每小题10分,共30分)1.证明下述文法G :S →aSbS|aS|d是二义性文法。
解:一个文法,如果存在某个句子有不只一棵语法分析树与之对应,那么称这个 文法是二义性文法。
句子aadbd 有两棵语法树。
如下图: (1) (2)由此可知,S →aSbS|aS|d 定义的文法是二义性文法。
2.对于文法G[S]:S →AB ,A →Aa|bB ,B →a|Sb 求句型baSb 的全部短语、直接短语和句柄?dSSabSS adSaSS abS dd句型baSb 的语法树如图五(2)所示。
图五(2) 句型baSb 的的语法树解:baSb 为句型baSb 的相对于S 的短语,ba 为句型baSb 的相对于A 的短语,Sb 为句型baSb 的相对于B 的短语,且为直接短语,a 为句型baSb 的相对于B 的短语,且为直接短语和句柄。
3.设有非确定的有自限动机NFA M=({A ,B ,C},{0,1},δ,{A},{C}),其中: δ (A ,0)={C} δ (A ,1)={A ,B} δ (B ,1)={C} δ (C ,1)={C}。