编译原理习题及答案1~3
- 格式:ppt
- 大小:4.25 MB
- 文档页数:274


第1章编译概述1.判断下面的陈述是否正确。
(1)编译器生成的目标程序都是可执行的程序。
(2)汇编器将高级语言程序翻译成汇编语言程序。
(3)编译程序和解释程序的根本区别在于解释程序对源程序并没有真正进行翻译。
(4)因为编译程序和解释程序具有不同的功能,所以它们的实现技术也完全不同。
(5)编译程序的五个组成部分缺一不可。
(6)许多编译程序在识别出语法单位后并不真正构造语法树。
(7)高级语言程序到低级语言程序的转换是基于语义的等价变换。
(8)含有优化部分的编译程序的执行效率高。
(9)优化的任务在于对中间代码进行加工和变换,以使其能产生运行结果更为准确的目标代码。
(10)编译前端主要由与源语言和目标机相关的那些部分组成。
(11)无论一遍扫描的编译器还是多遍扫描的编译器都要对源程序至少扫描一遍。
(12)在编译过程中,既可以将几个不同的阶段合为一遍,也可以把一个阶段的工作分为若干遍。
(13)取编译程序前端改写其后端以生成不同机器上的目标代码,目前技术上还难以实现。
(14)支持程序设计人员进行程序计开发的工具,除了编译程序以外,还需要编辑程序、链接程序和调试程序等其他一些工具。
2. 指出下列错误信息是编译的哪个阶段报告的A. 词法B. 语法C. 语义(1)else没有匹配的if(2)使用的标识符没有定义(3)标识符中出现?号(4)赋值语句写成:x+y=1;(5)float a=1.1, b=2, c ; c=a%b;(6)数组下标越界3. 阅读教材第1章,回答以下问题:(1)计算机执行用高级语言编写的程序有哪些途径?它们之间的主要区别是什么?(2)画出编译程序的总体逻辑结构图,以语句“Area=3.14*r*r”编译过程为例,简述编译各个阶段的主要任务。
习题答案1.(1) × (2) × (3) × (4) × (5) × (6) √ (7) √(8) × (9) × (10) × (11) √ (12) √ (13) × (14) √2.BCABCC。
编译原理自测一一、是非题(下列各题,你认为正确的,请在题干的括号内打“√”,错的打“×”。
每题1分,共5分)1、算符优先关系表不一定存在对应的优先函数。
正确2、数组元素的地址计算与数组的存储方式有关。
.正确3、仅考虑一个基本块,不能确定一个赋值是否真是无用的。
正确4、每个文法都能改写为LL(1)文法。
不正确5、对于数据空间的存贮分配,FORTRAN采用动态贮存分配策略。
不正确二、填空题1、从功能上说,程序语言的语句大体可分为(执行性)语句和(说明性)语句两大类。
2、扫描器的任务是从(源程序)中识别出一个个(单词符号)。
3、所谓最右推导是指:(任何一步αβ都是对α中最右非终结符进行替换的)。
4、语法分析最常用的两类方法是(自上而下)和(自下而上)分析法。
5、一个上下文无关文法所含四个组成部分是(一组终结符号,一组非终结符号、一个开始符号、一组产生式)。
6、所谓语法制导翻译方法是(为每个产生式配上一个翻译子程序,并在语法分析的同时执行这些子程序)。
7、符号表中的信息栏中登记了每个名字的有关的性质,如(类型、种属、?)等等。
8、一个过程相应的DISPLAY表的内容为(现行活动记录)。
9、常用的两种动态存贮分配办法是(栈式)动态分配和(堆式)动态分配。
10、产生式是用于定义(语法范畴)的一种书写规则。
三、名词解释1.遍--指编译程序对源程序或中间代码程序从头到尾扫描一次。
2.无环路有向图(DAG)--如果有向图中任一通路都不是环路,则称庐有向图为无环路有向图,简称DAG。
3.语法分析--按文法的产生式识别输入的符号串是否为一个句子的分析过程。
4.短语--令G是一个文法。
S划文法的开始符号,假定αβδ是文法G的一个句型,如果有SαAδ且AB,则称β是句型αβ相对非终结符A的短语。
5.后缀式--一种把运算量写在前面,把算符写在后面的表示表达式的方法。
编译原理自测二一、是非题(下列各题,你认为正确的,请在题干的括号内打“√”,错的打“×”。
第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 ⇒ aS ⇒ 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. 检查源程序的语法正确性答案:C2. 语法分析器的作用是什么?A. 识别单词符号B. 检查程序的语法结构C. 进行语义分析D. 生成目标代码答案:B3. 编译器的哪个阶段负责生成目标代码?A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:D4. 在编译原理中,下列哪个不是中间代码的形式?A. 三地址代码B. 后缀表达式C. 抽象语法树D. 源代码答案:D5. 编译过程中,语义分析的主要任务是什么?A. 识别单词符号B. 检查语法结构C. 检查类型一致性D. 生成可执行代码答案:C6. 编译器优化的主要目标是什么?A. 提高程序的可读性B. 减少程序的执行时间C. 增加程序的存储空间D. 提高程序的可移植性答案:B7. 编译器前端和后端的主要区别是什么?A. 前端负责生成中间代码,后端负责优化B. 前端负责词法和语法分析,后端负责代码生成C. 前端负责代码生成,后端负责优化D. 前端负责优化,后端负责生成目标代码答案:B8. 在编译原理中,哪些技术用于错误恢复?A. 预测分析B. 回溯C. 语法制导翻译D. 词法分析答案:B9. 编译器中的哪些阶段不涉及源程序的语义?A. 词法分析B. 语法分析C. 语义分析D. 代码优化答案:A10. 在编译原理中,哪些技术用于代码优化?A. 常量传播B. 死代码消除C. 循环不变代码外提D. 所有以上答案:D二、填空题(每题2分,共20分)1. 编译器的前端主要包括______和______两个阶段。
答案:词法分析;语法分析2. 编译器的后端主要包括______和______两个阶段。
答案:语义分析;代码生成3. 在编译原理中,______是将源程序代码转换成中间代码的过程。