2015-2016软件学院编译原理复习卷
编译原理复习题有答案
编译原理复习题有答案编译原理复习题及答案一、选择题1. 编译器的主要功能是什么?A. 代码格式化B. 代码优化C. 将源代码转换为机器码D. 错误检测和修复答案:C2. 词法分析阶段的主要任务是什么?A. 语法分析B. 语义分析C. 识别源程序中的词法单元D. 代码生成答案:C3. 下列哪个不是编译原理中的常见数据结构?A. 栈B. 队列C. 哈希表D. 链表答案:D4. 语法分析通常采用哪种方法?A. 递归下降分析B. 动态规划C. 贪心算法D. 深度优先搜索答案:A5. 代码优化的目的是什么?A. 增加程序长度B. 减少程序运行时间C. 提高程序的可读性D. 增加程序的复杂性答案:B二、简答题1. 简述编译过程的主要阶段。
答案:编译过程主要分为四个阶段:词法分析、语法分析、语义分析和代码生成。
词法分析负责将源代码分解成词法单元;语法分析构建语法树,检查源代码的语法结构;语义分析检查程序的语义正确性;代码生成将源代码转换成目标代码或机器码。
2. 什么是自底向上的语法分析方法?答案:自底向上的语法分析方法是一种从叶子节点开始,逐步向上构建语法树的方法。
它通常使用移进-归约分析技术,通过将输入符号与栈顶符号进行匹配,不断地将它们归约成非终结符,直到整个输入被归约为起始符号。
3. 请解释什么是中间代码,并说明其作用。
答案:中间代码是一种介于源代码和目标代码之间的代码形式,通常用于代码优化和目标代码生成。
它具有高级语言的可读性,同时又能表达程序的控制流和数据流信息。
中间代码使得编译器可以在不同的阶段对程序进行优化,提高程序的执行效率。
三、论述题1. 论述编译原理中的错误处理机制。
答案:编译原理中的错误处理机制主要包括错误检测、错误恢复和错误报告。
错误检测是指在编译过程中识别出源代码中的语法或语义错误;错误恢复是指在检测到错误后,编译器采取的措施以继续编译过程,避免因单个错误而中断整个编译;错误报告则是向程序员提供错误信息,帮助其定位和修复错误。
(完整版)编译原理复习题及答案
编译原理复习题及答案一、选择题1.一个正规语言只能对应(B)A 一个正规文法B 一个最小有限状态自动机2.文法G[A]:A→εA→aB B→Ab B→a是(A)A 正规文法B 二型文法3.下面说法正确的是(A)A 一个SLR(1)文法一定也是LALR(1)文法B 一个LR(1)文法一定也是LALR(1)文法4.一个上下文无关文法消除了左递归,提取了左公共因子后是满足LL(1)文法的(A)A 必要条件B 充分必要条件5.下面说法正确的是(B)A 一个正规式只能对应一个确定的有限状态自动机B 一个正规语言可能对应多个正规文法6.算符优先分析与规范归约相比的优点是(A)A 归约速度快B 对文法限制少7.一个LR(1)文法合并同心集后若不是LALR(1)文法(B)A 则可能存在移进/归约冲突B 则可能存在归约/归约冲突C 则可能存在移进/归约冲突和归约/归约冲突8.下面说法正确的是(A)A Lex是一个词法分析器的生成器B Yacc是一个语法分析器9.下面说法正确的是(A)A 一个正规文法也一定是二型文法B 一个二型文法也一定能有一个等价的正规文法10.编译原理是对(C)。
A、机器语言的执行B、汇编语言的翻译C、高级语言的翻译D、高级语言程序的解释执行11.(A)是一种典型的解释型语言。
A.BASIC B.C C.FORTRAN D.PASCAL12.把汇编语言程序翻译成机器可执行的目标程序的工作是由(B)完成的。
A. 编译器B. 汇编器C. 解释器D. 预处理器13.用高级语言编写的程序经编译后产生的程序叫(B)A.源程序 B.目标程序C.连接程序D.解释程序14.(C)不是编译程序的组成部分。
A.词法分析程序B.代码生成程序C.设备管理程序D.语法分析程序15.通常一个编译程序中,不仅包含词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成等六个部分,还应包括(C)。
A.模拟执行器B.解释器 C.表格处理和出错处理D.符号执行器16.编译程序绝大多数时间花在(D)上。
编译原理复习题
编译原理(一)一、是非题1、算符优先关系表不一定存在对应的优先函。
………………………………………()2、数组元素的地址计算与数组的存储方式有关。
……………………………()3、仅考虑一个基本块,不能确定一个赋值是否真是无用的。
…………………………()4、每个文法都能改写为LL(1)文法。
……………………………………………()5、对于数据空间的存贮分配,FORTRAN采用动态贮存分配策略。
………………()二、填空题1、从功能上说,程序语言的语句大体可分为()语句和()语句两大类。
2、扫描器的任务是从()中识别出一个个()。
3、所谓最右推导是指:()。
4、语法分析最常用的两类方法是()和()分析法。
5、一个上下文无关文法所含四个组成部分是()。
6、所谓语法制导翻译方法是()。
7、符号表中的信息栏中登记了每个名字的有关的性质,如()等等。
8、一个过程相应的DISPLA Y表的内容为()。
9、常用的两种动态存贮分配办法是()动态分配和()动态分配。
10、产生式是用于定义()的一种书写规则。
三、名词解释1、遍--2、无环路有向图(DAG)--3、语法分析--4、短语--5、后缀式--四、简述题1、考虑下面程序…………V ar a:integer;Procedure S(X);V ar X:integer;Begina:=a+1;X:=a+XEnd;Begina:=5;S(a);Print(a)End.试问:若参数传递方式分别采取传名和传值时,程序执行后输出a的值是什么?2、画出Pascal中实数(不带正负号,可带指数部分)的状态转换图。
3、写出表达式(a+b*c)/(a+b)-d的逆波兰表示及三元式序列。
4、已知文法G(S)S→a|∧|(T)T→T,S|S写出句子((a,a),a)的规范归约过程及每一步的句柄。
5、何谓优化?按所涉及的程序范围可分为哪几级优化?6、目标代码有哪几种形式?生成目标代码时通常应考虑哪几个问题?五、计算题1、写一个文法,使其语言是奇数集,且每个奇数不以0开头。
编译原理 试卷二
编译原理试卷二
一、简答题(10分)
1、什么是编译程序?典型的编译过程分哪几个阶段?
2、什么是文法的四元组表示?试写出具体的形式。
4、什么是语法制导翻译?它适用于哪些语法分析方法?
二、判断以下说法是否正确,如有错误,请改正之(不必说明原因)(8分)
1 编译程序生成的目标代码只能是机器语言。
()
2 等价文法是指两个文法完全相同。
()
3 正规式所确定的语言为正规集。
()
4 词法分析中单词符号是用上下文无关文法描述的,语法分析中语法类是用正则文法
描述的。
()
四、1 试找出某简单优先文法G[Z]的语法树所能确定的简单优先关系。
(5分)
五、现有文法G[S]:S→Sab|bA
A→S|a
试求文法的LR(0)有效项目集族C,并判断文法G[S] 是否为LR(0)文法?(15分)
六、1 将以下赋值语句翻译成逆波兰、三元式、间接三元式和四元式。
(9分)
X:=(a+b)*c+d/(a+b)
2 将以下语句翻译成四元式序列,并注明地址回填过程。
(10分)
A∨B>Y∧D。
编译原理考试试题1
编译原理一、(5×6分)回答下列问题:1.什么是S-属性文法?什么是L-属性文法?它们之间有什么关系? 2.什么是句柄?什么是素短语?3.划分程序的基本块时,确定基本块的入口语句的条件是什么? 4.运行时的DISPLAY 表的内容是什么?它的作用是什么? 5.对下列四元式序列生成目标代码:A:=B*C D:=E+F G:=A+D H:=G*2其中,H 是基本块出口的活跃变量, R0和R1是可用寄存器二、(8分)设∑={0,1}上的正规集S 由倒数第二个字符为1的所有字符串组成,请给出该字集对应的正规式,并构造一个识别该正规集的DFA 。
三、(6分)写一个文法使其语言为L(G)={ a n b m a m b n | m,n ≥1}。
四、(8分)对于文法G(E):E →T|E+T T →F|T*F F →(E)|i1. 写出句型(T*F+i)的最右推导并画出语法树。
2. 写出上述句型的短语,直接短语、句柄和素短语。
五、(12分)设文法G(S):(|*)B B |B A A A |SiA S A →+→→ 1.构造各非终结符的FIRSTVT 和LASTVT 集合; 2.构造优先关系表和优先函数。
六、(9分)设某语言的do-while 语句的语法形式为 S → do S (1) While E其语义解释为:真 假S (1)的代码 E 的代码针对自下而上的语法分析器,按如下要求构造该语句的翻译模式:(1) 写出适合语法制导翻译的产生式;(2) 写出每个产生式对应的语义动作。
七、(8分)将语句if (A<X) ∧ (B>0) then while C>0 do C:=C+D; 翻译成四元式。
八、(10分) 设有基本块如下:T1:=S+RT2:= 3T3:= 12/T2T4:=S/RA:=T1-T4T5:=S+RB:=T5T6:=T5*T3B:=T6(1)画出DAG图;(2)设A,B是出基本块后的活跃变量,请给出优化后的四元式序列。
编译原理考试试题和答案(汇总)
《编译原理》考试试题及答案(汇总)一、是非题(请在括号内,正确的划√,错误的划×)(每个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.构造编译程序应掌握______。
编译原理考试题及答案
编译原理考试题及答案一、选择题(每题5分,共20分)1. 编译器的主要功能是什么?A. 代码优化B. 代码翻译C. 代码调试D. 代码运行答案:B2. 下列哪个选项不属于编译器的前端部分?A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:D3. 在编译原理中,文法的产生式通常表示为:A. A -> αB. A -> βC. A -> γD. A -> δ答案:A4. 下列哪个算法用于构建语法分析树?A. LL(1)分析B. LR(1)分析C. SLR(1)分析D. LALR(1)分析答案:A二、填空题(每空5分,共20分)1. 编译器的前端通常包括词法分析、语法分析和________。
答案:语义分析2. 编译器的后端主要负责________和目标代码生成。
答案:代码优化3. 编译器中的词法分析器通常使用________算法来识别单词。
答案:有限自动机4. 语法分析中,________分析是一种自顶向下的分析方法。
答案:递归下降三、简答题(每题10分,共30分)1. 简述编译器的作用。
答案:编译器的主要作用是将高级语言编写的源代码转换成计算机能够理解的低级语言或机器代码,以便执行。
2. 解释一下什么是语法制导翻译。
答案:语法制导翻译是一种翻译技术,它利用源语言的语法信息来指导翻译过程,使得翻译过程能够更好地理解源代码的语义。
3. 什么是词法分析器?答案:词法分析器是编译器前端的一部分,它的任务是将源代码文本分解成一系列的标记(tokens),这些标记是源代码的最小有意义的单位。
四、计算题(每题10分,共30分)1. 给定一个简单的文法G(E):E → E + T | TT → T * F | FF → (E) | id请计算文法的非终结符号E的FIRST集和FOLLOW集。
答案:E的FIRST集为{(, id},FOLLOW集为{), +, $}。
2. 假设编译器在进行语法分析时,遇到一个语法错误的代码片段,请简述编译器如何处理这种情况。
编译原理试题及答案
编译原理试题及答案一、选择题1. 编译器的主要功能是什么?A. 将高级语言代码翻译成机器语言代码B. 进行程序调试C. 进行代码优化D. 管理程序运行时的内存分配答案:A2. 词法分析器的主要任务是什么?A. 将源代码分解成多个语句B. 将源代码分解成多个词素C. 检查源代码的语法正确性D. 将词素转换为相应的语法单位答案:B3. 下列哪个是自顶向下的语法分析方法?A. LL(1)分析法B. LR(1)分析法C. LALR(1)分析法D. GLR分析法答案:A4. 语义分析的主要任务是什么?A. 检查程序的语法正确性B. 检查程序的类型正确性C. 将源代码转换为目标代码D. 进行程序的优化答案:B5. 代码生成阶段的主要任务是什么?A. 将语法树转换为目标代码B. 进行程序的优化C. 检查程序的类型正确性D. 将源代码分解成多个词素答案:A二、简答题1. 简述编译过程的主要阶段。
答案:编译过程主要分为四个阶段:词法分析、语法分析、语义分析和代码生成。
词法分析将源代码分解成词素,语法分析检查源代码的语法结构,语义分析检查源代码的语义正确性,代码生成将源代码转换为目标代码。
2. 什么是中间代码?它在编译过程中起到什么作用?答案:中间代码是一种介于源代码和目标代码之间的代码形式,它通常具有更接近于机器语言的特性,但仍然保持一定的抽象级别。
中间代码在编译过程中起到桥梁的作用,它使得代码优化和目标代码生成更加方便和高效。
三、论述题1. 论述编译器优化的几种常见方法。
答案:编译器优化主要包括以下几种方法:常量折叠、死代码消除、公共子表达式消除、循环优化、代码内联、寄存器分配等。
这些优化方法可以提高程序的执行效率,减少资源消耗,提高程序的运行速度。
结束语:本试题涵盖了编译原理的基本知识点,包括编译器的功能、编译过程的主要阶段、中间代码的作用以及编译器优化的方法。
希望考生能够通过本试题加深对编译原理的理解和掌握。
完整版编译原理复习题及答案
A必要条件B充分必要条件
下面说法正确的是( A )
A一个正规文法也一定是二型文法
B一个二型文法也一定能有一个等价的正规文法 编译原理是对(C)。
A、机器语言的执行B、汇编语言的翻译
D、咼级语言程序的解释执行
(A)是一种典型的解释型语言。
A.线性表B.树
词法分析器的输出结果是(D)。
A、单词自身值
C、单词的种别编码 词法分析器不能(D)
A.识别出数值常量
C.扫描源程序并识别记号
C.完全图D.堆栈
B、单词在符号表中的位置
D、单词的种别编码和自身值
B.过滤源程序中的注释
D.发现括号不匹配
文法:G:StxSx|y所识别的语言是(D)。
A、xyxB、(xyx)*
A.状态数相等
C.所识别的语言相等
若状态k含有项目“ 归约的语法分析方法是
LR分析法
源程序
(C)。
Af a
(D)。
B.LR(0)分析法
a•为(B)项目。
B.移进
_宀曰 一定是
但不能用正则表达式表示。
无法判定是否存在
C. a0b0a
D. cba
(D)
D. bc10
C.非终结符集
(A)
C.二义性的
A.BASICB.C
把汇编语言程序翻译成机器可执行的目标程序的工作是由(B)完成的。
A.编译器
B.汇编器
C.解释器
D.
预处理器
用高级语言编写的程序经编译后产生的程序叫
(B)
A•源程序
B.目标程序
C.连接程序
编译原理试题及答案(期末复习版)
<编译原理>历年试题及答案一.(每项选择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)构造预测分析表。
期末考试卷编译原理2015级卷子
2015级卷子填空:1.一个RG r和一个DFA M等价的含义是。
2.DFA有,,,,五个部分。
3.编译是把源语言程序。
4.全局优化技术包括,。
5.if(a>b or b<d) then X:…的逆波兰式。
6.编译的前端是。
7.文法的句子是。
8.一般高级语言的语法可以用文法表示。
9.属性文法的属性有和。
10.对符号表项的操作有,。
简答:1.词法分析的任务是什么?一般高级语言单词的分类有?2.消除左递归,提取公因子,并判断改写后的文法是不是LL(1)。
A->Ba|bB->AC|εC->c3.(此题有误,勿做)文法为:E->ET+|TT->TF*|FF->FP↑|PP->E|i串为FET+T*i↑,画出语法树,判断是否为右句型,若是,则指出句柄。
4.写一个3型文法,表示{a n b m,n,m>=1}。
5.判断正规式(a*|b*)*与((ε|a)b*)*是否等价。
6.窥孔优化:x:=f*2.0u:=f/2.07.E->TRR->+T {print(‘+’)} R1R->εT->num {print(num.val)}改写以左翻译模式,消除内嵌语义动作。
8.说明SLR(1)文法与LALR(1)文法的关系并说明理由。
解答题:1.给一个文法:S->bAS|aBS|εA->aBA|bB->bAB|a计算FIRST集和FOLLOW集,并判断是否为LL(1)文法,若是,写出预测分析表。
2.写一个语言为以a开头,bab结尾的正规式Σ={a,b},画出相应的NFA、DFA并化简。
3.给定文法:S->AS|bA->SA|a写出LR(1)项目集规范族,并判断是否是LR(1)文法。
4.下面的属性文法可用于将二进制无符号小数转化为十进制小数(开始符号为N):(1) N->.S {S.f:=1; print(S.v)}(2) S->BS1{S1.f:=S.f+1; B.f:=S.f; S.v:=B.v+S1.v}(3) S->ε{S.v:=0}(4) B->0 {B.v:=0}(5) B->1 {B.v:=2-B.f}对于输入串.101的分析树,给出语义计算的过程。
编译原理期末考试复习题(含答案)
编译原理期末考试复习题(含答案)一、选择题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.本考卷中大写字母∈V N ,其他符号∈V T;2、试卷中一、二两题请作在考卷上一、概念题(15分)1、编译过程一般分为几个阶段?各阶段的输入输出分别为什么?2、对下列状态转换图,写出状态0的处理过程:其中:状态2的过程为proc2.3、文法G为:S→aABA→aB→γβα| |则判断G为LL(1)文法的条件是:二、判断题(10分。
注:每答对一题得+2分;答错一题得-2分;不答者得0分)1、设∑为{a,b},则a,ba,{∑},Ø都是∑上的正规式。
()2、对于上下文无关文法G[S],若S⇒αAB⇒αβγ则A→γ一定是一条产生式规则,其中α,β,γ∈(V T∨V N)*()3、对于逆波兰后缀式,无论从哪头开始分析均可得到唯一正确的分解。
()4、LR(0)分析法是一种规范归约法。
()5、算符优先分析法只能用来分析算符优先文法。
()三、(10分)设文法G3为:S →AaBcA →Aa|aB →b 求句型AaBc 的最左素语。
四、(20分)设文法G[S]为S →aAcB 问:1、该文法是否为算符文法,为什么? A →Ab|b 2、构造算符优先关系表。
B →d 3、该文法是否可改造为LL (1)文法,为什么? 五、(本题20分)设文法G 为: E →eAf|eBgA →aA|aB →Bb|a 对于输入串eaaaf ,采用LR (0)、LL (1)、SLR (1)等方法中合适的一种进行分析。
六、(25分)有作控制用的布尔表达式文法G[E]及其语义动作如下:1、 构造SLR (1)分析表(若不是SLR(1))的,则说明理由)2、 分析布尔式a∨b<c 的四元式生成过程,并画出最后的真假链表。
3、 给出语句IF a∨b<c THEN I:=m*n ELSE I:=m+n 的完整四元式序列。
文法G[E]:(1)E →i()1<i()2 {E.TC:=NXQ; E.FC=NXQ+1;GEN(J<,ENTRY(i()1),ENTRY(i()2),O);GEN(J, , ,0)}(2)E →AE ()1 {E.FC:=E ()1.FC; E.FC:=MERGE(A.TC ,E ()1.TC)} (3)A →B∨ {BACKPATCH(B.FC ,NXQ); A.TC:=B.TC} (4)B →i {B.TC:=NXQ; B.FC:=NXQ+1;GEN(Jnz, ENTRY(i), ,0); GEN(J, , ,0)}编译原理考试答案及评分细则一:1、(5分)2、(5分)Proc 0:getchar();CASE char OF‘a’,’b’,…,’z’:‘A’,’B’,…,’Z’: proc 1else errorEND CASE3、(5分)条件:(1)文法G不含左递归;(2)对于每个非终结符,First(α)、First(β)、First(γ)两两不相交;(3)对于每个非终结符,不含能推出ε的产生式,故不考虑非终结符的First集和Follow集相交的情况。
《编译原理》考试试题及答案(汇总)
《编译原理》考试试题及答案(汇总)一、是非题(请在括号内,正确的划√,错误的划×)(每个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.构造编译程序应掌握______。
编译原理-复习题-答案
一、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论) ACDBB BCCBD CCBBB ACBDCDACAB BADDC二、填空题(每空2分)1.表格处理、出错处理2.编译程序3.是否生成目标代码4.源程序、目标程序5.语法成分6.自上而下、自下而上7.句子8.左9.开始符号、直接推导、句子、匹配10.直接归约、开始符号11.传地址12.语法13.句柄14.语义规则15.词法分析、语法分析、中间代码生成、16.执行性、说明性17.源程序、单词符号18.语法范畴三、简答题1. 写一文法,使其语言是偶正整数的集合,要求:(1)允许0打头;(2)不允许0打头。
答案:(1)G[S]=({S,P,D,N},{0,1,2,…,9},P,S)P:S->PD|DP->NP|ND->0|2|4|6|8N->0|1|2|3|4|5|6|7|8|9(2)G[S]=({S,P,R,D,N,Q },{0,1,2,…,9},P,S)P:S->PD|P0|DP->NR|NR->QR|QD->2|4|6|8N->1|2|3|4|5|6|7|8|9Q->0|1|2|3|4|5|6|7|8|92. 已知文法 G[E] 为:E→T|E+T|E-TT→F|T*F|T/FF→ ( E ) |i①该文法的开始符号(识别符号)是什么?②请给出该文法的终结符号集合 VT 和非终结符号集合 VN 。
③找出句型 T+T*F+i 的所有短语、简单短语和句柄。
答案:①该文法的开始符号(识别符号)是E。
②该文法的终结符号集合VT={+、-、*、/、(、)、i}。
非终结符号集合VN={E、T、F}。
③句型T+T*F+I的短语为i、T*F、第一个T、T+T*F+i; 简单短语为i、T*F、第一个T;句柄为第一个T。
3. 构造正规式相应的 NFA : 1(0|1)*101答案:1(0|1)*101对应的NFA为4. 写出表达式(a+b*c)/(a+b)-d的逆波兰表示和三元式序列。
编译原理考试试卷
一、填空题(每空2分,共30分)1、编译程序的整个过程可以从逻辑上划分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等几个阶段,另外还有两个重要的工作是表格管理和出错处理2、规范规约中的可归约串是句柄,算符优先分析中的可归约串是最左素短语.3、语法分析方法主要可分为自顶向下和自底向上两大类。
4、LR(0)文法的项目集中不会出现移进-归约冲突和归约—归约冲突。
5、数据空间的动存态储分配方式可分为栈式和堆式两种。
6、编译程序是指能将源语言程序翻译成目标语言程序的程序。
7、确定有穷自动机DFA是NFA 的一个特例.8、表达式(a+b)*c 的逆波兰表示为ab+c* 。
二、选择题(每题2分,共20分)1、L R语法分析栈中存放的状态是识别 B 的DFA状态。
A、前缀B、可归前缀C、项目D、句柄2、 D 不可能是目标代码。
A、汇编指令代码B、可重定位指令代码C、绝对机器指令代码D、中间代码3、一个控制流程图就是具有 C 的有向图A、唯一入口结点B、唯一出口结点C、唯一首结点D、唯一尾结点4、设有文法G[S]:S→b|bB B→bS ,则该文法所描述的语言是 C 。
A、L(G)={b i|i≥0}B、L(G)={b2i|i≥0}C、L(G)={b2i+1|i≥0}D、L(G)={b2i+1|i≥1}5、把汇编语言程序翻译成机器可执行的目标程序的工作是由B 完成的。
A、编译器B、汇编器C、解释器D、预处理器6、在目标代码生成阶段,符号表用于 D 。
A、目标代码生成B、语义检查C、语法检查D、预处理器地址分配07、规范归约是指 B 。
A、最左推导的逆过程B、最右推导的逆过程C、规范推导D、最左归约逆过程8、使用 A 可以定义一个程序的意义.A、语义规则B、词法规则C、语法规则D、左结合规则9、经过编译所得到的目标程序是 D 。
A、三元式序列B、四元式序列C、间接三元式D、机器语言程序或汇编语言程序10、在一个基本块内进行的代码优化是 B .A、全局优化B、局部优化C、循环优化D、代码外提三、简答题(3小题,共30分)1、已知文法G[S]:S→Ac|aBA→abB→bc证明该文法具有二义性(本题6分)证明:因为该文法的句型abc存在如下两棵语法树:所以,该文法具有二义性一、填空题(每空1分,共20分)1.编译过程一般分为、、中间代码生成、和目标代码生成五个阶段。
编译原理复习题答案
二、概念题1、设有文法:P→P+Q|QQ→Q*R|RR→(P)|i(1)证明Q*R+Q+Q是它的一个句型。
(3分)(2)给出Q*R+Q+Q的所有短语,直接短语和句柄。
(4分) (3)给出句子i+i*i的最右推导。
(4分)(4)给出句子i+i*i的最左推导。
(4分)2、设有文法:E→E+T|T T→T*F|F F→(E)|i (1)证明E+T*F是它的一个句型。
(3分)⇒+⇒+*答案:E E T E T F(2)给出E+T*F的所有短语,直接短语和句柄。
(4分) 短语: E+T*F, T*F,直接短语: T*F句柄: T*F(3)给出句子i+i*i的最右推导。
(4分)3、写出表达式a+b*(c-d)对应的逆波兰式和三元式序列。
答案:逆波兰式:(abcd-*+)三元式序列:OP ARG1 ARG2(1) - c d(2) * b (1)(3) + a (2)三、词法分析题给出下面语言的相应文法L1={a n b n a m b m|n,m≥0}答案:S→AB|A|B|∑A→aAb|abB→aBb|ab给出下面语言的相应文法L2={a n b n c i|n≥1,i≥0}答案:S→AB|BA→a|aAB→bBc|bc给出下面语言的相应文法L3={a n b n c m| m,n≥1,n为奇数,m为偶数}。
答案:文法G(S):S→ACA→aaAbb/abC→ccCcc/cc四、词法分析题1、构造下面正规式相应的DFA((0|1)*|(11)*)*(要求:先将正规式转化为NFA,再将NFA确定化,最小化)2、构造下面正规式相应的DFA1(0|1)*101答案:I I0 I1{X} Ф{A,B,C}{A,B,C} { B,C} { B,C,D}{B,C} { B,C} { B,C,D}{B,C,D} { B,C,E} { B,C,D}{B,C,E} { B,C} {B,C,D,y}{B,C,D,y} {B,C,E} { B,C,D}3、构造一个DFA,它接受 ={a,b}上所有包含ab的字符串。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
S S | ( S ) | ε
可以给出串 ( )的两种不同的最左推导: 最左推导 1: 最左推导 2: S ( S ) (ε) ( ) S ( S ) ( S S )(ε S )(ε ε) ( ) 分析栈 int T Tx 3 某同学认为,如果一个文法是 SLR(1)的,那么该文法一定也是 LALR(1)。此看法正确吗?为什么? (5 分) 参考解答:此看法正确。因为,SLR(1)分析技术依靠 Follow 集合的全集来尝试解决移进-归约、归约-归 约等分析冲突,而 LALR(1)分析技术依靠搜索符集合来尝试解决分析冲突,那些搜索符集合是 Follow 集 合的(真)子集,且两者识别活前缀的状态转换以及状态中的相应 LR(0)项目集合均是一致的。显然,如 果在全集下能解决分析冲突,当然在某个(真)子集下也能解决分析冲突,也就是说,一个文法如果是 SLR(1)的,那么该文法一定也是 LALR(1)的。 T x, Tx,y Tx,y, Tx,y,z Tx,y,L Tx,L TL D 输入串 int x,y,z x,y,z x,y,z ,y,z y,z ,z z L → id L → id , L1 L → id , L1 D → T L Top-5 Top-5 Top-3 T → int 归约产生式 T.type 位置
(b) 保持 L 产生式的右递归形式,给出该语法制导定义在 LR 分析下的属性栈代码实现。 如需要,可适当修改文法 G3 的产生式; (10 分) 修改后产生式 1 2 3 4 5 6 D → T L T → int T → real L → id , M L1 L → id M → L.in := T.type T.type := INT T.type := REAL L1.in := M.s; AddType( id.entry, M.s ) M.i := L.in AddType( id.entry, L.in ) M.s := M.i 修改后语义规则
合
肥
工
业
大
学
试
卷 ( A √ 、 B ) 参考解答:
学分 课程性质:必修 选修 、限修 考试形式:开卷 、闭卷√ 张炳武 命题教师 系(所或教研室)主任审批签名
2 针对文法 G0: S ( S )S | ε
2015~2016 学年第 1 专业班级(教学班)
学期 课程代码 考试日期
课程名称 编译原理
注:如修改文法,不得改变原文法产生的语言。
(a) 以输入串 int x,y,z 为例,指出在 LR 分析期间,当 L 归约时,类型信息,即 T 的综合属性 T.type 命题教师注意事项:1、主考教师必须于考试一周前将“试卷 A” 、 “试卷 B”经教研室主任审批签字后送教务科印刷。 2、请命题教师用黑色水笔工整地书写题目或用 A4 纸横式打印贴在试卷版芯中。
参考解答: test: pushl movl subl movl movl movl movl movl movl movl movl movl movl leave ret
%ebp %esp, %ebp $4, %esp 8(%ebp), %eax (%eax), %eax %eax, -4(%ebp) 8(%ebp), %edx 12(%ebp), %eax (%eax), %eax %eax, (%edx) 12(%ebp), %edx -4(%ebp), %eax %eax, (%edx)
合
肥
工
业
大
学
试
卷 ( A √ 、 B ) 参考解答:
学分 课程性质:必修 选修 、限修 考试形式:开卷 、闭卷√ 张炳武 命题教师 系(所或教研室)主任审批签名
2015~2016 学年第 1 专业班级(教学班)
修改后产生式 1 2 3 4 5 6 D → T L T → int T → real
学期 课程代码 考试日期
(b) {w∈(0 | 1)+ | w 不能 被 5 整除 }
参考解答:
1 直接给出相关 DFA (a) {w∈(0 | 1)* | w 含有 00 子串 1 0 0 1 1 1 0 2 } 0
注:本题中三个文法必须各不相同。
参考解答:
(a) First(S) = { ( , ε} LL(1)分析表如下: ( S S ( S )S ) S ε $ S ε Follow(S) = { $, ) }
int a[100],i,j,gap,temp; … … while (gap > 0) { for ( i = gap; i < n; i++ ){ j = i - gap; temp = a[i]; while (( j >= 0 ) && ( a[j] > temp )) { a[j + gap] = a[j]; j = j - gap; } //while a[j + gap] = temp; } //for gap = ( gap - 1 ) / 3; } //while 参考解答: a)三地址代码 100 if gap <= 0 goto 127 101 i = gap 102 if i >= n goto 124 103 j = i – gap 104 t1 = 4 * i 105 temp = a[t1] 106 if j >= 0 goto 108 107 goto 119 108 t2 = 4 * j 109 t3 = a[t2]
4 以下是文法 G3 的产生式及语法制导定义,完成将标识符的类型添入符号表的工作。 产生式 1 2 3 4 5 D → T L T → int T → real L → id , L1 L → id L.in := T.type T.type := INT T.type := REAL L1.in := L.in; AddType( id.entry, L.in ) AddType( id.entry, L.in ) 语义规则
合
肥
工
业
大
学
试
卷 ( A √ 、 B ) 参考解答:
学分 课程性质:必修
在属性栈上的位置; (5 分)
2015~2016 学年第 1 专业班级(教学班)
(c) 二义性文法 课程名称 编译原理
选修
、限修
考试形式:开卷 、闭卷√ 张炳武
命题教师
系(所或教研室)主任审批签名
L → id , M L1 L → id M →
分析栈 int T Tx T x, T x, M1 T x, M1 y T x, M1 y, T x, M1 y, M2 T x, M1 y, M2 z T x, M1 y, M2 L T x, M1 L TL D
输入串 int x,y,z x,y,z x,y,z ,y,z y,z y,z ,z z z
(a) 以输入串 int x,y,z 为例,指出在 LR 分析期间,当 L 归约时,类型信息,即 T 的综合属性 T.type 在属性栈上的位置; (5 分) (b) 保持 L 产生式的右递归形式,给出该语法制导定义在 LR 分析下的属性栈代码实现。 如需要,可适当修改文法 G3 的产生式; (10 分) (c) 给出一个 S 属性定义来完成相同工作,如需要,可修改文法 G3 的产生式。 (10 分)
S
0 1 0 1 1 0
1 1 2 3 0 0
1
4
(
S
I4: S
) S(S).
I3: S S
S(S . ) S .( S )
命题教师注意事项:1、主考教师必须于考试一周前将“试卷 A” 、 “试卷 B”经教研室主任审批签字后送教务科印刷。 2、请命题教师用黑色水笔工整地书写题目或用 A4 纸横式打印贴在试卷版芯中。
课程名称 编译原理
属性栈代码
Val[ntop] := INT Val[ntop] := REAL AddType( id.entry, Val[top-1] ) AddType( id.entry, Val[top-1] ) Val[ntop] := Val[top-2] 修改后产生式(左递归) 1 2 3 4 5 D → L T → int T → real L → L1,id L → T id T.type := INT T.type := REAL L.in := L1.in; AddType( id.entry, L1.in ) AddType( id.entry, T.type ); L.in := T.type 修改后语义规则(左递归)
合
肥
工
业
大
学
试
卷 ( A √ 、 B ) 参考解答:
学分 课程性质:必修 选修 、限修 考试形式:开卷 、闭卷√ 张炳武 命题教师 系(所或教研室)主任审批签名
2015~2016 学年第 1 专业班级(教学班)
学期 课程代码 考试日期
课程名称 编译原理
110 if t3 > temp goto 112 111 goto 119 112 t4 = j + gap 113 t5 = 4 * t4 114 t6 = 4 * j 115 t7 = a[t6] 116 a[t5] = t7 117 j = j – gap 118 goto 106 119 t8 = j + gap 120 t9 = 4 * t8 121 a[t9] = temp 122 i = i + 1 123 goto 102 124 t10 = gap – 1 125 gap = t10 / 3 126 goto 100 127 … … 6 下面是某C源程序。请补全其在linux下经编译后所得的汇编代码。 【10分】 void test(int * a , int * b) { int c ; c = * a ; *a = *b; *b = c; } .file "a.c" .text .globl test .type test,@function test: pushl %ebp movl %esp, %ebp subl movl , %eax movl , %eax movl %eax, -4(%ebp) movl , %edx movl , %eax movl , %eax movl %eax, movl movl , %eax movl %eax, leave