编译原理样题2(有答案)
编译原理期末试题(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.构造编译程序应掌握______。
《编译原理》样卷及答案

一、简答题(每题4分,共24分)1、构造一个文法G,使得:L(G)={(m )m|m>0}解答:G[S]: s-> ()|(S)2、构造一个正规式,它接受 ={0,1}上符合以下规则的字符串:串内有且只有2个1的0、1字符串全体。
解答:0*10*10*3、消除文法G[S]中的直接左递归和回溯S→(L) | aS | aL→L,S | S解答:S→(L) | aS'S'→S | εL→S L'L'→,S L' | ε4、文法G[S]是乔姆斯基几型文法?S → ABS | ABAB → BAA → 0B → 1解答:1型文法/上下文有关文法5、按Thmopson算法构造与正则表达式(1*|0) * 等价的NFA。
解答:略6、设计一个状态转换图,其描述的语言规则为:如果以a开头,则其后是由a、b组成的任意符号串;如果以b开头,则其后是至少包含一个a的由a、b组成的任意符号串。
解答:略二、(本题10分)对于文法G[E]:E→ET+|TT→TF* | FF→F^ | a(1) 给出句子FF^^*的最左推导和语法树;(2) 给出句子FF^^*的短语、直接短语和句柄。
解答: (1) 2分:句子FF^^*的最左推导 2分:句子FF^^*的语法树E=>T=>TF*=>FF*=>FF^*=>FF^^*(2) 3分:句子FF^^*的短语FF^^*、FF^^*、F、F^、F^^2分:句子FF^^*的直接短语F、F^1分:句子FF^^*的句柄F三、(本题15分)构造与下列NFA等价的最小化DFA。
解答:(1)10分:构造与NFA等价的DFA(2)5分:对DFA最小化首先,将所有的状态集合分成子集: k1={0,1,2,4} k2={3,5}四、(本题15分)对下列文法G[S]:s→ eT | RTT→ DR | εR→ dR | εD→ a | bd(1) 写出文法G[S]每个非终结符的FIRST集和FOLLOW集;(2) 判断文法G[S]是否LL(1)文法(注:必须给出判断过程,否则不得分);(3) 写出文法文法G[S]的预测分析表。
编译原理试题及答案(二)

试题6 解析
问题1
描述问题1的内容和答案。
问题2
描述问题2的内容和答案。
问题3
描述问题3的பைடு நூலகம்容和答案。
试题7 解析
语法树
了解如何构建和使用语法树。
代码优化
探索如何优化编译后的代码。
代码生成
学习将语法树转换为机器代码。
试题3 解析
1
扫描
通过扫描源代码来生成词法记号。
2
解析
将词法记号转换为语法树或抽象语法树。
3
优化
对生成的语法树进行优化和调整。
试题4 解析
问题 问题1 问题2 问题3
答案 答案1 答案2 答案3
试题5 解析
1 问题1
描述问题1的内容和答案。
3 问题3
描述问题3的内容和答案。
2 问题2
描述问题2的内容和答案。
编译原理试题及答案(二)
继续深入探索编译原理,使学习更加有趣和易懂。
试题1 解析
问题1
描述问题1的内容和答案。
问题2
描述问题2的内容和答案。
问题3
描述问题3的内容和答案。
试题2 解析
设计
了解编译器设计的基本原则和 流程。
语法分析
学习语法分析的算法和相关术 语。
词法分析
识别编程语言中的关键字、运 算符和标识符等。
编译原理教程课后习题答案第二章

第二章 词法分析2.1 完成下列选择题:(1) 词法分析器的输出结果是。
a. 单词的种别编码b. 单词在符号表中的位置c. 单词的种别编码和自身值d. 单词自身值(2) 正规式M1和M2等价是指。
a. M1和M2的状态数相等b. M1和M2的有向边条数相等c. M1和M2所识别的语言集相等d. M1和M2状态数和有向边条数相等(3) DFA M(见图2-1)接受的字集为。
a. 以0开头的二进制数组成的集合b. 以0结尾的二进制数组成的集合c. 含奇数个0的二进制数组成的集合d. 含偶数个0的二进制数组成的集合【解答】(1) c (2) c (3) d图2-1 习题2.1的DFA M2.2 什么是扫描器?扫描器的功能是什么?【解答】 扫描器就是词法分析器,它接受输入的源程序,对源程序进行词法分析并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用。
通常是把词法分析器作为一个子程序,每当词法分析器需要一个单词符号时就调用这个子程序。
每次调用时,词法分析器就从输入串中识别出一个单词符号交给语法分析器。
2.3 设M=({x,y}, {a,b}, f, x, {y})为一非确定的有限自动机,其中f 定义如下:f(x,a)={x,y} f {x,b}={y}f(y,a)=Φ f{y,b}={x,y}试构造相应的确定有限自动机M ′。
【解答】 对照自动机的定义M=(S,Σ,f,So,Z),由f 的定义可知f(x,a)、f(y,b)均为多值函数,因此M 是一非确定有限自动机。
先画出NFA M 相应的状态图,如图2-2所示。
图2-2 习题2.3的NFA M 用子集法构造状态转换矩阵,如表表2-1 状态转换矩阵1b将转换矩阵中的所有子集重新命名,形成表2-2所示的状态转换矩阵,即得到 M ′=({0,1,2},{a,b},f,0,{1,2}),其状态转换图如图2-3所示。
表2-2 状态转换矩阵将图2-3所示的DFA M ′最小化。
编译原理复习题有答案版

1、给出下面语言的相应文法。
L1={a n b n c i|n≥1,i≥0}答案:S→AB|BA→a|aAB→bBc|bc2.给出下面语言的相应文法L1={a n b n c m d m| m,n≥1,n为奇数,m为偶数}。
答案:文法G(S):S→ACA→aaAbb/abC→ccCcc/cc3、构造一个DFA,它接受 ={a,b}上所有包含ab的字符串。
(要求:先将正规式转化为NFA,再将NFA确定化,最小化)(一)相应的正规式为(a|b)*ab(a|b)*(二)①与此正规式对应的NFA为答案;在自己写的纸上4、对下面的文法G:E→TE’E’→+E|εT→FT’T’→T|εF→PF’F’→*F’|εP→(E)|a|b|∧(1)证明这个文法是LL(1)的。
考虑下列产生式:E’ ->E|εT’ ->T|εF’ ->*F’ |εP ->(E) |∧a|bFIRST(+E)∩FIRST(ε)={+}∩{ε}=φFIRST(+E)∩FOLLOW(E')={+}∩{#,)}=φFIRST(T)∩FIRST(ε)={(,a,b,^}∩{ε}=φFIRST(T)∩FOLLOW(T')={(,a,b,^}∩{+,),#}=φFIRST(*F')∩FIRST(ε)={*}∩{ε}=φFIRST(*F')∩FOLLOW(F')={*}∩{(,a,b,^,+,),#}=φFIRST((E))∩FIRST(a) ∩FIRST(b) ∩FIRST(^)=φ所以,该文法式LL(1)文法.计算这个文法的每个非终结符的FIRST和FOLLOW。
(8分)答案:FIRST(E)={(,a,b,^}FIRST(E')={+,ε}FIRST(T)={(,a,b,^}FIRST(T')={(,a,b,^,ε}FIRST(F)={(,a,b,^}FIRST(F')={*,ε}FIRST(P)={(,a,b,^}FOLLOW(E)={#,)}FOLLOW(E')={#,)}FOLLOW(T)={+,),#}FOLLOW(T')={+,),#}FOLLOW(F)={(,a,b,^,+,),#}FOLLOW(F')={(,a,b,^,+,),#}FOLLOW(P)={*,(,a,b,^,+,),#}(3)构造它的预测分析表。
编译原理自测(一、二、三)及答案

编译原理自测一一、是非题(下列各题,你认为正确的,请在题干的括号内打“√”,错的打“×”。
每题1分,共5分)1、算符优先关系表不一定存在对应的优先函数。
A.正确B.不正确2、数组元素的地址计算与数组的存储方式有关。
A.正确B.不正确3、仅考虑一个基本块,不能确定一个赋值是否真是无用的。
A.正确B.不正确4、每个文法都能改写为LL(1)文法。
A.正确B.不正确5、对于数据空间的存贮分配,FORTRAN采用动态贮存分配策略。
A.正确B.不正确二、填空题1、从功能上说,程序语言的语句大体可分为两大类。
2、扫描器的任务是从3、所谓最右推导是指:(任何一步αβ都是对α中最右非终结符进行替换的)4、语法分析最常用的两类方法是5、一个上下文无关文法所含四个组成部分是(一组终结符号,一组非终结符号、一个开始符号、一组产生式)6、所谓语法制导翻译方法是(为每个产生式配上一个翻译子程序,并在语法分析的同时执行这些子程序)7、符号表中的信息栏中登记了每个名字的有关的性质,如8、一个过程相应的DISPLA Y表的内容为9、常用的两种动态存贮分配办法是配。
10、产生式是用于定义三、名词解释1.遍--指编译程序对源程序或中间代码程序从头到尾扫描一次。
2.无环路有向图(DAG)--如果有向图中任一通路都不是环路,则称庐有向图为无环路有向图,简称DAG。
3.语法分析--按文法的产生式识别输入的符号串是否为一个句子的分析过程。
4.短语--令G是一个文法。
S划文法的开始符号,假定αβδ是文法G的一个句型,如果有SαAδ且AB,则称β是句型αβ相对非终结符A的短语。
5.后缀式--一种把运算量写在前面,把算符写在后面的表示表达式的方法。
编译原理自测二一、是非题(下列各题,你认为正确的,请在题干的括号内打“√”,错的打“×”。
每题1分,共5分)1、一个LL(1)文法一定是无二义的。
A.正确B.不正确2、逆波兰法表示的表达式亦称前缀式。
编译原理一些习题答案

编译原理⼀些习题答案第2章形式语⾔基础2.2 设有⽂法G[N]: N -> D | NDD -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9(1)G[N]定义的语⾔是什么?(2)给出句⼦0123和268的最左推导和最右推导。
解答:(1)L(G[N])={(0|1|2|3|4|5|6|7|8|9)+} 或L(G[N])={α| α为可带前导0的正整数}(2)0123的最左推导:N ? ND ? NDD ? NDDD ? DDDD ? 0DDD ? 01DD ? 012D ? 0123 0123的最右推导:N ? ND ? N3 ? ND3 N23 ND23 N123 D123 0123268的最左推导:N ? ND ? NDD ? DDD ? 2DDD ? 26D ? 268268的最右推导:N ? ND ? N8 ? ND8 ? N68 ? D68 ? 2682.4 写⼀个⽂法,使其语⾔是奇数的集合,且每个奇数不以0开头。
解答:⾸先分析题意,本题是希望构造⼀个⽂法,由它产⽣的句⼦是奇数,并且不以0开头,也就是说它的每个句⼦都是以1、3、5、7、9中的某个数结尾。
如果数字只有⼀位,则1、3、5、7、9就满⾜要求,如果有多位,则要求第1位不能是0,⽽中间有多少位,每位是什么数字(必须是数字)则没什么要求,因此,我们可以把这个⽂法分3部分来完成。
分别⽤3个⾮终结符来产⽣句⼦的第1位、中间部分和最后⼀位。
引⼊⼏个⾮终结符,其中,⼀个⽤作产⽣句⼦的开头,可以是1-9之间的数,不包括0,⼀个⽤来产⽣句⼦的结尾,为奇数,另⼀个则⽤来产⽣以⾮0整数开头后⾯跟任意多个数字的数字串,进⾏分解之后,这个⽂法就很好写了。
N -> 1 | 3 | 5 | 7 | 9 | BNB -> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | B02.7 下⾯⽂法⽣成的语⾔是什么?G1:S->ABA->aA| εB->bc|bBc G2:S->aA|a A->aS解答:B ? bcB ? bBc? bbccB ? bBc? bbBcc ? bbbccc……A ?εA ? aA ? aA ? aA ? aaA ? aa……∴S ? AB ? a m b n c n , 其中m≥0,n≥1即L(G1)={ a m b n c n | m≥0,n≥1} S ? a S ? aA ? aaS ? aaaS ? aA ? aaS ? aaaA ?aaaaS ? aaaaa ……∴S ? a2n+1 , 其中n≥0即L(G2)={ a2n+1 | n≥0}2.11 已知⽂法G[S]: S->(AS)|(b)A->(SaA)|(a)请找出符号串(a)和(A((SaA)(b)))的短语、简单短语和句柄。
《编译原理》历年试题及答案

<编译原理>历年试题及答案一.(每项选择2分,共20分)选择题1.将编译程序分成若干个“遍”是为了___。
a.提高程序的执行效率b.使程序的结构更加清晰c.利用有限的机器内存并提高机器的执行效率d.利用有限的机器内存但降低了机器的执行效率2.构造编译程序应掌握____。
a.源程序b.目标语言c.编译方法d.以上三项都是3.变量应当_。
a.持有左值b.持有右值c.既持有左值又持有右值d.既不持有左值也不持有右值4.编译程序绝大多数时间花在____上。
a.出错处理b.词法分析c.目标代码生成d.管理表格5.词法分析器的输出结果是____。
a.单词的种别编码b.单词在符号表中的位置c.单词的种别编码和自身值d.单词自身值6.正规式MI和M2等价是指____。
a. MI和M2的状态数相等b.Ml和M2的有向弧条数相等。
C.M1和M2所识别的语言集相等 d. Ml和M2状态数和有向弧条数相等7.中间代码生成时所依据的是—。
a.语法规则 b.词法规则 c.语义规则 d.等价变换规则8.后缀式ab+cd+/可用表达式___来表示。
a.a+b/c+d b.(a+b)/(c+d) c.a+b/(c+d) d.a+b+c/d9.程序所需的数据空间在程序运行前就可确定,称为______管理技术。
a.动态存储b.栈式存储c.静态存储d.堆式存储10.堆式动态分配申请和释放存储空间遵守________原则。
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编译原理试题
计算机学院_____级班学号姓名
一选择题
1、编译原理各阶段工作都涉及 2 (第1章):
A.词法分析
B.表格管理
C.语法分析
D.语义分析
2、正则表达式R1和R2等价是指 3 (第4章)
A.R1和R2都是定义在一个字母表上的正则表达式
B.R1和R2中使用的运算符相同
C.R1和R2代表同一正则集
D.R1和R2代表不同正则集
3、在以下的语法分析中, 4 特别适合于表达式的分析。
(第5,6,7章)
A.LR分析
B.LL(1)分析
C.递归下降分析
D.算符优先分析
4、与(a|b)*(a|b)等价的正规式是 3 。
(第4章)
A.a*| b*
B.(ab)*(a|b)
C.(a|b)(a|b)*
D.(a|b)*
5、在语法制导翻译中不采用拉链回填技术的语句是 2 。
(第8章)
A.跳转语句
B.赋值语句
C.条件语句
D.循环语句
6、在属性文法中,终结符只具有 B 属性。
(第8章)
A.传递
B.继承
C.抽象
D.综合
7、过程的Display表中记录了_ 2 _____。
(第10章)
A. 过程的连结数据
B. 过程的嵌套层数
C. 过程的返回地址
D. 过程的入口地址
二判断题
1、最左归约也称为规范归约。
(第3章) 1
2、逆波兰法表示的表达式把运算对象放在运算符的后面。
(第8章) 0
3、同心集的合并有可能产生“归约/归约”冲突。
(第7章)1
4、DFA可以通过多条路径识别一个符号串。
(第4章)0
5、动态数组的存储空间在编译时就可完全确定。
(第10章)0
三填空题
1、词法分析所依循的是语言的文法;而中间代码生成所依循的是语义。
(第4,8章)
+
2、在LR(0)分析法中,若α,β∈V *且a ∈T V 则称“S →α.A ”为 待约 项目,称“S →α.a β”为 移进 项目。
(第7章)
3、规范规约每次规约的是句型的_____句柄_________。
(第6章)
4、无符号常数的识别和计算该常数的工作,通常在______词法______阶段完成的。
(第4章)
四、设字母表为{a,b}的语言L 的句子是满足下述条件的串:每个a 都有b 直接跟在右边。
构造该语言的正则式。
(第4章)
五、将下图的NFA 确定化为DFA,图中初态为X ,终态为Y 。
(第4章)
六、写一个2型文法G ,使得L(G)={a i+2b i |i>=0}∪{a i b i+2|i>=0}。
(第3章)
七、设文法G (S ):(第5章) S → S +aF|aF|+aF F → *aF|*a
(1)消除左递归和左因子;
(2)构造相应的FIRST 和FOLLOW 集合; (3)构造预测分析表。
八、对文法G[S]:S → aSb | P (第6章)
P → bPc | bQc Q → Qa | a
请构造简单优先关系表,该文法是否是简单优先文法?
九、设有以下程序段(第10章)
program main; var a,b:integer;
procedure p(x,y,z:integer); begin
y:=y*2; z:=z+x end ;
begin
a:=5; b:=2; p(a*b,a,a); write(a)
end.
对于下列参数传递方式,分别写出执行程序后a的输出值。
(1)传值;(2)传地址;(3)值结果;(4)传名。
十、文法G[S]及其LR分析表如下,请给出对串dada#的分析过程。
(第7章)
G[S]: 1) S →VdB2) V →e
3) V →ε 4) B →a
5) B →Bda 6) B →ε
十一、试将下述程序段翻译成三地址形式的中间代码表示。
(第8章) while ( a+b<c OR a=b )
while ( a<5 AND b<10 )
{
a=a+1;
b=b+1;
}
}
十二、将下面程序划分为基本块,并画出其程序流图。
read(A,B)
F:=1
C:=A*A
D:=B*B
if C<D goto L1
E:=A*A
F:=F+1
E:=E+F
write(E)
halt
L1: E:=B*B
F:=F+2
E:=E+F
write(E)
if E>100 goto L2
halt
L2: F:=F-1
goto L1
十三、对PL/0语言扩充单词-=和--: (第2章)
请完成下列识别单词‘-’,‘-=’和‘--’(设单词内码分别为MINUS,MINUSBECOME和MINUSMINUS)的词法分析算法:
if ( CH=='-' ) {
① ;
if ( ② ) {
SYM=MINUSBECOME;
GetCh();
}else if ( CH=='-' ) {
③
}else
④
}
答案
一选择题
b,c,d,c,b,d,b
二判断题
√×√××
三填空题
1、文法语义
2、待约项目移进项目
3、句柄
4、词法
四 (b|ab)*
五
解:用子集法确定化如下表
I I a I b状态
{X,0,1,3} {0,1,3}.. {2,3,Y}.. {1,3}.... {2,Y}.... {Y}....{0,1,3}
{0,1,3}
{1,3}
{1,3}
{2,3,Y}
{2,3,Y}
{Y}....
{2,Y}..
{Y}
....
-X
1
+2
3
+4
+Y
确定化后如下图
六解:文法G(S):
S →aSb
S →aa
S →bb
七解:
(1)(消除左递归,提公因左因子)
S→aFS'|+aFS'
S'→+aFS'|ε
F→*aF'
F'→F|ε
(2)
FIRST(S)={a,十} FOLLOW(S)={#}
FIRST(S’)={+,ε } FOLLOW(S')={#}
FIRST(F)={*} FOLLOW(F)=(+,#)
FIRST(F')={*,ε} FOLLOW(+)={#}
(3)
八 Head(S)={a,P,b} Head(P)={b} Head(Q)={Q,a}
Tail(S)={b,P,c} Tail(P)={c} Tail(Q)={a}
(1)“=”关系: a=S S=b b=P P=c b=Q Q=c Q=a
(2)“<”关系: a<Head(S) b<Head(P) b<Head(Q) (3)“>”关系: Tail(S)>b Tail(P)>c Tail(Q)>a
S a b P Q c
S =
a = < > < < >
b < < > = = <
P > =
Q = =
c > >
九(1)5;(2)20;(3)15;(4)30。
步骤状态栈文法符号栈剩余输入符号动作
1 2 3 4 5 6 7 8 9 0
02
024
0245
0246
02467
024678
0246
01
#
#V
#Vd
#Vda
#VdB
#VdBd
#VdBda
#VdB
#S
dada#
dada#
ada#
da#
da#
a#
#
#
#
用V →ε归约
移进
移进
用B →a归约
移进
移进
用B →Bda 归约
用S →VdB 归约
接受
100: t:=a+b
101: if t<c goto 105
102: goto 103
103: if a=b goto 105
104: goto 112
105: if a<5 goto 107
106: goto 100
107: if b<10 goto 109
108: goto 100
109: a:=a+1
110: b:=b+1
111: goto 105
112:
GetCh();
CH=='='
SYM=MINUSMINUS
SYM=MINUS。