编译原理样题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) 构造预测分析表。
编译原理习题及答案(整理后)
5、自下而上的语法分析中,应从 开始分析。 a. 句型 b. 句子 c. 以单词为单位的程序 d. 文法的开始符 e. 句柄 6、对正规文法描述的语言,以下 有能力描述它。 a.0型文法 b.1型文法 c.上下文无关文法 d.右线性文法 e.左线 性文法 三、填空题 1、文法中的终结符和非终结符的交集是 。词法分析器交给语法 分析器的文法符号一定是 ,它一定只出现在产生式的 部。 2、最左推导是指每次都对句型中的 非终结符进行扩展。 3、在语法分析中,最常见的两种方法一定是 分析法,另一是 分析法。 4、采用 语法分析时,必须消除文法的左递归。 5、 树代表推导过程, 树代表归约过程。 6、自下而上分析法采用 、归约、错误处理、 等四种操作。 7、Chomsky把文法分为 种类型,编译器构造中采用 和 文 法,它们分别产生 和 语言,并分别用 和 自动机识别所产 生的语言。 四、判断题 1、文法 S→aS|bR|ε描述的语言是(a|bc)* ( ) R→cS 2、在自下而上的语法分析中,语法树与分析树一定相同。 ( ) 3、二义文法不是上下文无关文法。 ( ) 4、语法分析时必须先消除文法中的左递归。 ( ) 5、规范归约和规范推导是互逆的两个过程。 ( ) 6、一个文法所有句型的集合形成该文法所能接受的语言。 ( ) 五、简答题 1、句柄 2、素短语 3、语法树 4、归约 5、推导 六、问答题 1、给出上下文无关文法的定义。 2、文法G[S]: S→aSPQ|abQ QP→PQ bP→bb
E E + F E + T P T i P #<·+·>+<·i·># 图2-8-1 句型P+T+I的语法及优先关系
6、选c。
7、由图2-8-1的语法树和优先关系可以看出应选b。
编译原理与技术期末考试模拟试题2及答案
编译原理与技术模拟试题二一、填空题(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一个文法产生的_______________________称为该文法的语言。
编译原理2习题答案
2.对 下 面 的 文 法 G : E → TE' F → PF' E' → +E| ε F' → *F'| ε T → FT' T' → T| ε P → (E) | a | b | ^
(1)计算这个文法的每个非终结符的 FIRST 集和 FOLLOW 集。 (2) 证明这个方法是 LL(1) 的。 (3) 构造它的预测分析表。 FIRST(E')={+,ε} FIRST(P)={(,a,b,^); 解:(1)计算这个文法的每个非终结符的 FIRST 集和 FOLLOW 集。 FIRST 集合有: FIRST(E)=FIRST(T)=FIRST(F)=FIRST(P)={(,a,b,^); FIRST(T')=FIRST(T)+{ε}={(,a,b,^,ε); FOLLOW(E)={+,},#};//不包含 ε FOLLOW(T')=FOLLOW(T)=FIRST(E')∪FOLLOW(E)={+,},#}; FOLLOW(F)=FIRST(T')∪FOLLOW(T)={(,a,b,^,+,),#};//不包含 ε FOLLOW(F')=FOLLOW(F)=FIRST(T')∪FOLLOW(T)={(,a,b,^,+,),#}; FOLLOW(P)=FIRST(F')∪FOLLOW(F)={*,(,a,b,^,+,),#};//不包含 ε (2)证明这个方法是 LL(1)的。 各产生式的 SELECT 集合有: SELECT(E->TE')=FIRST(T)={(,a,b,^); SELECT(E'->+E)={+}; SELECT(E'->ε)=FOLLOW(E/)={},#} SELECT(T->FT')=FIRST(F)={(,a,b,^); SELECT(T'->T)=FIRST(T)={(,a,b,^); SELECT(T'->ε)=FOLLOW(T/)={+,},#}; SELECT(F->PF')=FIRST(P)={(,a,b,^); SELECT(F'->*F')={*}; SELECT(F'->ε)=FOLLOW(F')={(,a,b,^,+,),#}; SELECT(P->(E))={() SELECT(P->a)={a} SELECT(P->b)={b} SELECT(P->^)={^} 可见,相同左部产生式的 SELECT 集的交集均为 空,所以文法 G[E]是 LL(1)文法。 (3)构造它的预测分析表。 文法 G[E]的预测分析表如下: FIRST(F')={*,ε};
(完整版)编译原理期末试题(二)含答案,推荐文档
5.文法 G(S)
S→dAB
A→aA| a
B→Bb| ε
描述的语言是什么?
6. 证明文法 G(S)
S→SaS| ε
是二义性的。
7. 已知文法 G(S)
S→BA
A→BS| d
B→aA| bS | c
的预测分析表如下
a
b
c
d
#
S
S→BA
S→BA
S→BA
A
A→BS
A→BS
A→BS
A→d
B
B→aA
B→bS
B→c
S=>SaS=>SaSaS=>aSaS=>aaS=>aa
S=>SaS=>aS=>aSaS=>aaS=>aa
7.句子 adccd 的分析过程:
步骤
符号栈
输入串
产生式
0
#S
adccd#
1
#AB
adccd#
S→BA
2
#AAa
adccd#
B→aA
3
#AA
dccd#
4
#Ad
dccd#
A→d
5
#A
ccd#
6
#SB
()
16.一个 LL(1)文法一定是无二义的。
()
17.逆波兰法表示的表达试亦称前缀式。
()
18.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
()
19.正规文法产生的语言都可以用上下文无关文法来描述。
()
20.一个优先表一定存在相应的优先函数。
()
21.3 型文法一定是 2 型文法。
()
13.删除多余运算,代码外提,强度削弱,变换循环控制条件,合并已知量,复写传播和删除无用赋值。
编译原理练习题及答案
第一章练习题(绪论)一、选择题1.编译程序是一种常用的软件。
A) 应用B) 系统C) 实时系统D) 分布式系统2.编译程序生成的目标代码程序是可执行程序。
A) 一定B) 不一定3.编译程序的大多数时间是花在上。
A) 词法分析B) 语法分析C) 出错处理D) 表格管理4.将编译程序分成若干“遍”将。
A)提高编译程序的执行效率;B)使编译程序的结构更加清晰,提高目标程序质量;C)充分利用内存空间,提高机器的执行效率。
5.编译程序各个阶段都涉及到的工作有。
A) 词法分析B) 语法分析C) 语义分析D) 表格管理6.词法分析的主要功能是。
A) 识别字符串B) 识别语句C) 识别单词D) 识别标识符7.若某程序设计语言允许标识符先使用后说明,则其编译程序就必须。
A) 多遍扫描B) 一遍扫描8.编译方式与解释方式的根本区别在于。
A) 执行速度的快慢B) 是否生成目标代码C) 是否语义分析9.多遍编译与一遍编译的主要区别在于。
A)多遍编译是编译的五大部分重复多遍执行,而一遍编译是五大部分只执行一遍;B)一遍编译是对源程序分析一遍就立即执行,而多遍编译是对源程序重复多遍分析再执行;C)多遍编译要生成目标代码才执行,而一遍编译不生成目标代码直接分析执行;D)多遍编译是五大部分依次独立完成,一遍编译是五大部分交叉调用执行完成。
10.编译程序分成“前端”和“后端”的好处是A)便于移植B)便于功能的扩充C)便于减少工作量D)以上均正确第二章练习题(文法与语言)一、选择题1.文法 G 产生的 (1) 的全体是该文法描述的语言。
A.句型B. 终结符集C. 非终结符集D. 句子2.若文法 G 定义的语言是无限集,则文法必然是 (2) A递归的 B 上下文无关的 C 二义性的 D 无二义性的3. Chomsky 定义的四种形式语言文法中, 0 型文法又称为(A)文法;1 型文法又称为(C)文法;2 型语言可由(G) 识别。
A 短语结构文法B 上下文无关文法C 上下文有关文法D 正规文法E 图灵机F 有限自动机G 下推自动机4.一个文法所描述的语言是(A);描述一个语言的文法是(B)。
编译原理 (第2版) 第二版 课后习题答案2
(4)NFA
2.解:构造DFA矩阵表示
0
1
{z}
{x}
{Z}*
{X,z}
{y}
{X,z}*
{X,z}
{X,y}
{y}
{X,y}
{X,y}
{X,y,z}
{x}
{X,y,z}*
{X,y,z}
{X,y}
其中0表示初态,*表示终态
用0,1,2,3,4,5分别代替{X}{Z}{X,z}{y}{X,y}{X,y,z}
SELECT(E’->+E)={+}
SELECT(E’->ε)=FOLLOW(E’)= {#,)}
SELECT(T->FT’)=FIRST(F)= {(,a,b,^}
SELECT(T’ —>T)=FIRST(T)= {(,a,b,^)
SELECT(T’->ε)=FOLLOW(T’)= {+,#,)}
FIRST(S) = { begin }
FIRST(A) = FIRST(B)∪FIRST(A’)∪{ξ} = {a , if , ; ,ξ}
FIRST(A’) ={ ; ,ξ}
FIRST(B) = FIRST(C)∪FIRST(D) ={ a , if }
FIRST(C) = {a}
FIRST(D) = FIRST(E)= { if }
A-> a A’ { a }
A’->ξ{ $ , a, b }
A’-> C { a , b }
B->a B B { a }
B -> b B’ { b }
B’->ξ{ $ , a , b }
B’-> C { a, b }
编译原理考试习题及答案资料
)#
归约 S → (T) T,S
2020/12/15
23
CH.5.练习题2(P133.)
2.(2).给出(a,(a,a))“移进-归约”的过程。
(2) 解: (a,(a,a))的“移进-归约”过程:
步骤 符号栈 输入串
动作
句柄
17 # (T
)#
归约 T → T,S (T)
18 # (T)
#
移进 )
终5
I0 I1 1
23 23 43 25 43
CH.3.练习题7(P64.)
7. 构造下列正规式相应的DFA。 (1) 1(0|1)*101 解2: 正规式对应的NFA:
1
0 1 1 12 031 4
I
I0
{0} 初0
0
I1 {1}
0
1 0 11
DFA: 03
{1}
1 {1} 1 {1,2} 2
(2) 给出句子0127、34和568的最左和最右推导。 注意:1)步骤,和 + 的区别;2) 不能写为→ 解:0127的最左推导:NNDNDDNDDDDDDD 0DDD01DD012D0127 0127的最右推导:NNDN7ND7N27ND27 N127D1270127
13
CH.2.练习题8(P36.)
3
{3,5,2} {3,2}
{3,Y,4,2}
4
{3,Y,4,2} {3,5,2} {3,4,2}
终5
2020/12/15
51Y
I0 I1 1
23 23 43 25 43
3
(1) 正规式 1(0|1)*101 DFA:
0
3,2
0
1
x
编译原理考试题及答案
编译原理考试题及答案一、选择题(每题2分,共20分)1. 编译器的主要功能是将高级语言源程序转换成机器语言目标程序。
(对/错)答案:对2. 编译过程中,词法分析器的主要任务是识别源程序中的各种词法单位。
(对/错)答案:对3. 在语法分析阶段,编译器使用的数据结构是栈。
(对/错)答案:错4. 语义分析的主要目的是检查程序的语法结构是否正确。
(对/错)答案:错5. 编译器的优化阶段可以提高目标程序的执行效率。
(对/错)答案:对6. 编译器的代码生成阶段负责将中间代码转换为目标代码。
(对/错)答案:对7. 编译器的运行时系统包括内存管理、输入输出处理等功能。
(对/错)答案:对8. 编译器的前端主要负责源程序的分析,后端负责目标代码的生成。
(对/错)答案:对9. 编译器的词法分析阶段不涉及对标识符的识别。
(对/错)答案:错10. 编译器的语法分析阶段可以识别出所有的语法错误。
(对/错)答案:对二、填空题(每题2分,共20分)1. 编译器在进行语法分析时,通常采用________算法。
答案:LL(1)或LR(1)2. 编译器在语义分析阶段,需要对变量的________进行检查。
答案:作用域和生命周期3. 编译器在代码优化阶段,常用的优化技术包括________和循环优化。
答案:常量传播4. 编译器在目标代码生成阶段,需要考虑________的约束。
答案:目标机器5. 编译器的运行时系统包括________、内存管理、输入输出处理等。
答案:程序启动和异常处理6. 编译器在词法分析阶段,需要识别的词法单位包括________、标识符、常量等。
答案:关键字7. 编译器在语法分析阶段,使用的分析表可以是________表或ACTION 表。
答案:GOTO8. 编译器在语义分析阶段,需要对表达式的________进行计算。
答案:类型9. 编译器的代码生成阶段,需要将中间代码转换为________代码。
答案:目标机器10. 编译器的运行时系统在内存管理中,需要处理________和垃圾收集。
编译原理习题(含解答)_
5. 写出表达式(a+b*c)/(a+b)-d的逆波兰表示和三元式序列。 解:逆波兰表示: abc*+ab+/d- 三元式序列: ① (*,b,c) ② (+,a,①) ③ (+,a,b) ④ (/,②,③) ⑤ (-,④,d) 五、计算题(10分) 1.构造下述文法 G[S] 的自动机: S->A0 A->A0|S1|0 该自动机是确定的吗?若不确定,则对它确定化。 解:由于该文法的产生式S->A0,A->A0|S1中没有字符集VT的输入,所 以不是确定的自动机。 要将其他确定化,必须先用代入法得到它对应 的正规式。把S->A0代入产生式A->S1有: A=A0|A01|0=A(0|01)|0=0(0|01)*。 代入S->A0有该文法的正规式: * 0(0|01) 0,所以, 改写该文法为确定的自动机为:
由于状态A有3次输入0的重复输入,所以上图只是NFA,下可知DFA为: 1 0 0 C B A 0
综合练习二
一、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划 按错论)(每个4分,共40分) 1.通常一个编译程序中,不仅包含词法分析,语法分析,中间代码生 成,代码优化,目标代码生成等五个部分,还应包括_ C_ __。 A.模拟执行器 B.解释器 C.表格处理和出错处理 D.符号执行器 2.文法 G[N]=({b},{N,B},N ,{N→b│bB,B→bN}),该文法所 描述的语言是_ C_ __。 A.L(G[N])={bi│i≥0} B.L(G[N])={b2i│i≥0} C.L(G[N])={b2i+1│i≥0} D.L(G[N])={b2i+1│i≥1} 3.一个句型中的最左_ _B_ __称为该句型的句柄。 A.短语 B.简单短语 C.素短语 D. 终结符号 4.设 G 是一个给定的文法,S是文法的开始符号,如果 S->x( 其中 x∈V*), 则称 x 是文法 G 的一个__ B ___。 A.候选式 B.句型 C.单词 D.产生式 5.文法 G[E] : E→T∣E + T T→F∣T ﹡ F F→a∣ ( E ) 该文法句型 E + F ﹡ (E + T) 的简单短语是下列符号串中的__ B ___。 ① (E + T) ②E + T ③F ④ F ﹡ (E + T) A.① 和 ③ B.② 和 ③ C.③ 和 ④ D.( ) ③ 6.若一个文法是递归的,则它所产生的语言的句子__ A ___。 A.是无穷多个 B.是有穷多个 C.是可枚举的 D.个数是常量 7.词法分析器用于识别_ C____。 A.句子 B.句型 C.单词
2023大学_编译原理试题及参考答案
2023编译原理试题及参考答案编译原理试题一、是非题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个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:SxSx|y所识别的语言是_____。
A.( ) xyxB.( ) (xyx)__C.( ) xnyxn(n0)D.( ) x__yx__4.如果文法G是无二义的,则它的任何句子_____。
A.( )最左推导和最右推导对应的语法树必定相同B.( ) 最左推导和最右推导对应的语法树可能不同C.( ) 最左推导和最右推导必定相同D.( )可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握______。
A.( )源程序B.( ) 目标语言C.( ) 编译方法D.( ) 以上三项都是6.四元式之间的联系是通过_____实现的。
A.( ) 指示器B.( ) 临时变量C.( ) 符号表D.( ) 程序变量7.表达式(┐AB)(CD)的逆波兰表示为_____。
A. ( ) ┐ABCDB.( ) A┐BCDC.( ) AB┐CDD.( ) A┐BCD8. 优化可生成_____的目标代码。
A.( ) 运行时间较短B.( ) 占用存储空间较小C.( ) 运行时间短但占用内存空间大D.( ) 运行时间短且占用存储空间小9.下列______优化方法不是针对循环优化进行的。
A. ( ) 强度削弱B.( ) 删除归纳变量C.( ) 删除多余运算D.( ) 代码外提10.编译程序使用_____区别标识符的作用域。
编译原理试题及答案
编译原理试题及答案一、选择题1. 编译器的主要功能是什么?A. 代码优化B. 语法分析C. 代码生成D. 所有以上选项答案:D2. 下列哪个阶段属于编译过程的前端?A. 语法分析B. 代码生成C. 运行时库链接D. 目标代码优化答案:A3. 在编译原理中,什么是“产生式系统”?A. 一种编程语言的规范B. 一种用于描述语法的系统C. 一种代码优化技术D. 一种代码生成方法答案:B4. 以下哪个是自顶向下的语法分析方法?A. LR分析B. LALR分析C. LL分析D. CYK算法答案:C5. 在编译器的哪个阶段会进行类型检查?A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:C二、填空题1. 编译器在进行________时,会识别源代码中的各种标识符、常量、运算符等,并将其转换成相应的符号。
答案:词法分析2. 在编译原理中,________图是一种用于描述程序执行过程中变量状态的图,它以节点表示变量的值,以有向边表示程序的控制流。
答案:控制流3. 语法分析的主要任务是根据________规则来分析和构建源程序的语法结构。
答案:语法4. 在编译过程中,________是将源程序中的高级表示转换为机器语言或中间代码的过程。
答案:代码生成5. 编译器的________阶段负责将优化后的代码转换为目标机器可执行的指令序列。
答案:目标代码生成三、简答题1. 简述编译器的一般工作流程。
答:编译器的一般工作流程包括以下几个阶段:首先是词法分析,将源代码文本分解成一系列的记号;其次是语法分析,根据语言的语法规则构建抽象语法树;接着是语义分析,检查源代码的语义正确性并进行类型检查;然后是中间代码生成,将抽象语法树转换为中间表示形式;之后是代码优化,对中间代码进行各种优化以提高效率;最后是代码生成,将优化后的中间代码转换为目标机器的机器代码。
2. 描述自顶向下和自底向上语法分析方法的主要区别。
答:自顶向下的语法分析方法从开始符号开始,尝试将输入的记号序列归约为语法中的产生式规则,直到得到完整的抽象语法树。
- 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。