编译概念复习题(参考答案)
- 格式:doc
- 大小:174.50 KB
- 文档页数:6
编译原理复习题及答案一、选择题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.用高级语言编写的程序经编译后产生的程序叫(B)A.源程序 B.目标程序C.连接程序D.解释程序12.(C)不是编译程序的组成部分。
A.词法分析程序B.代码生成程序C.设备管理程序D.语法分析程序13.通常一个编译程序中,不仅包含词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成等六个部分,还应包括(C)。
A.模拟执行器B.解释器 C.表格处理和出错处理D.符号执行器14.源程序是句子的集合,(B)可以较好地反映句子的结构。
A. 线性表B. 树C. 完全图D. 堆栈15.词法分析器的输出结果是(D)。
A、单词自身值B、单词在符号表中的位置C、单词的种别编码D、单词的种别编码和自身值16.词法分析器不能(D)A. 识别出数值常量B. 过滤源程序中的注释C. 扫描源程序并识别记号D. 发现括号不匹配17.文法:G:S→xSx | y所识别的语言是(D)。
编译技术考试试题及答案考试试题一:编译过程的基本原理是什么?答案:编译过程是将源代码转化为目标代码的过程。
它主要包括以下几个步骤:词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。
其中,词法分析将源代码划分为一个个的词法单元;语法分析将词法单元按照语法规则进行组织和分析;语义分析对语法正确的代码进行语义检查;中间代码生成将源代码转化为一种中间表示形式;代码优化对中间代码进行优化以提高程序执行效率;目标代码生成将中间代码转化为目标机器代码。
考试试题二:什么是LL(1)文法?答案:LL(1)文法是一种上下文无关文法。
它的特点是每个非终结符的任意一个产生式的开始符号的集合都是不相交的,并且对于任意一个非终结符的产生式,它的所有后继符号串的FIRST集合也是不相交的。
LL(1)文法主要用于LL(1)语法分析器的构建。
考试试题三:请解释一下语法制导翻译的概念。
答案:语法制导翻译是指将源语言的语法结构翻译为目标语言的过程。
它通过在语法分析的同时进行翻译动作,将源语言的语义信息传递到目标语言中。
语法制导翻译可以通过语法制导定义的方式来实现,即在语法规则中嵌入翻译动作。
这样,在语法分析的过程中,每次使用某个产生式进行规约时,都会执行相应的翻译动作。
考试试题四:简述基于栈的中间代码生成方法。
答案:基于栈的中间代码生成方法是将源代码转化为中间代码的一种常用方法。
它利用栈数据结构来辅助生成中间代码。
具体步骤如下:1. 初始化栈,将栈底设置为$2. 读入源代码的符号串3. 从左到右扫描输入符号串,遇到终结符号则入栈,遇到非终结符号则查找相应的产生式,并将产生式右部符号入栈4. 重复步骤3,直到栈顶为$且输入符号串为空时停止5. 栈中剩余的中间代码即为生成的结果基于栈的中间代码生成方法简单高效,能够准确地将源代码转化为中间代码,为后续的代码优化和目标代码生成提供了便利。
考试试题五:编译过程中常见的代码优化技术有哪些?答案:编译过程中常见的代码优化技术包括:常量传播、复制传播、死代码删除、公共子表达式消除、循环优化、函数内联、代码重排等。
编译原理复习题有答案编译原理复习题及答案一、选择题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→aBB→AbB→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)ALe某是一个词法分析器的生成器BYacc是一个语法分析器9.下面说法正确的是(A)A一个正规文法也一定是二型文法B一个二型文法也一定能有一个等价的正规文法10.编译原理是对(C)。
A、机器语言的执行B、汇编语言的翻译C、高级语言的翻译D、高级语言程序的解释执行C.FORTRAND.PASCAL11.(A)是一种典型的解释型语言。
A.BASICB.C12.把汇编语言程序翻译成机器可执行的目标程序的工作是由(B)完成的。
A.编译器B.汇编器C.解释器D.预处理器13.用高级语言编写的程序经编译后产生的程序叫(B)A.源程序B.目标程序C.连接程序14.(C)不是编译程序的组成部分。
A.词法分析程序B.代码生成程序D.解释程序D.语法分析程序C.设备管理程序15.通常一个编译程序中,不仅包含词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成等六个部分,还应包括(C)。
A.模拟执行器B.解释器C.表格处理和出错处理D.符号执行器16.编译程序绝大多数时间花在(D)上。
一、单选题(每题2分,共20分)1. 编译器的()阶段可将源程序的字符流收集到若干记号中。
A. 语法分析B. 语义分析C. 代码生成D. 词法分析2. 文法A aA | b属于正则文法,正则文法在乔姆斯基层次中对应于()文法。
A. 1型B. 2型C. 3型D. 0型3. 某C语言源代码文件包含#include <stdio.h>,()将对源代码进行处理,把文件stdio.h 包含进去。
A.编译器B.解释器C.汇编器D.预处理器4. LL(1)文法的充要条件是()。
A.对于文法中的每条产生式Uα1|α2|…|αn,要求FIRST(αi)∩FIRST(αj)=Φ(i≠j)B.该文法对应的LL(1)分析表中每个项目最多只有一条产生式。
C.A和BD.都不是5. 以下说法中正确的是()。
A.任何语言都可以描述为一个正则表达式。
B.对于任何一个NFA M,都存在一个DFA M’,满足L(M)= L(M’)。
C.任何一个DFA只有一个终态。
D.NFA的弧上标记只含输入字母表中的元素。
6.合成属性的计算可以通过对语法树进行()遍历进行。
A. 前序B.中序C.后序D.任意7.乔姆斯基的2型文法是这样一种语言,其产生式限制为()。
A. α->βB. P->βC. P->a或P->aβD. αPγ->αβγ8. 正则式的“*”读作()。
A. 并且B.连接C.正则闭包D.闭包9. 编译程序中的语义分析器接受以()为单位的输入,并产生信息供以后各阶段使用。
A. 语法树B.子程序C.单词D.语句10.文法A->aAb|ab生成的语言是()。
A. {ab}B.{aAb}C. {anbn|n≥1}D.{anbn|n≥0}二、判断题(每题2分,共10分,对的打√,错的打×)1. 一个LR(0)文法一定是SLR(1)文法。
()2. 在类型声明文法中,类型属性type是继承属性。
2-3 习题(含解答)目录第1章编译原理概述 (1)第2章PL/O编译程序的实现 (4)第3章文法和语言 (4)第4章词法分析 (13)第5章自顶向下语法分析方法 (28)第6章自底向上优先分析 (39)第7章LR分析 (42)第8章语法制导翻译和中间代码生成 (60)第9章符号表 (67)第10章目标程序运行时的存储组织 (70)第11章代码优化 (73)第12章代码生成 (76)综合练习一 (79)综合练习二 (84)综合练习三 (90)综合练习四 (95)综合练习五 (101)综合练习六 (107)第1章编译原理概述一、选择题1.一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括 (1) 。
其中, (2) 和代码优化部分不是每个编译程序都必需的。
词法分析器用于识别 (3) ,语法分析器则可以发现源程序中的 (4) 。
(1) A.模拟执行器 B.解释器 C.表格处理和出错处理 D.符号执行器(2) A.语法分析 B.中间代码生成 C.词法分析 D.目标代码生成(3) A.字符串 B.语句 C.单词 D.标识符(4) A.语义错误 B.语法和语义错误 C.错误并校正 D.语法错误2.程序语言的语言处理程序是一种 (1) 。
(2) 是两类程序语言处理程序,他们的主要区别在于 (3) 。
(1) A.系统软件 B.应用软件 C.实时系统 D.分布式系统(2) A.高级语言程序和低级语言程序 B.解释程序和编译程序C.编译程序和操作系统D.系统程序和应用程序(3) A.单用户与多用户的差别 B.对用户程序的查错能力C.机器执行效率D.是否生成目标代码3.汇编程序是将翻译成,编译程序是将翻译成。
A.汇编语言程序B.机器语言程序C.高级语言程序D. A 或者BE. A 或者CF. B或者C4.下面关于解释程序的描述正确的是。
(1) 解释程序的特点是处理程序时不产生目标代码(2) 解释程序适用于COBOL 和 FORTRAN 语言(3) 解释程序是为打开编译程序技术的僵局而开发的A. (1)(2)B. (1)C. (1)(2)(3)D.(2)(3)5.高级语言的语言处理程序分为解释程序和编译程序两种。
第八节习题一、单项选择题1、将编译程序分成若干个“遍”是为了 b 。
a.提高程序的执行效率b.使程序的结构更加清晰c.利用有限的机器存并提高机器的执行效率d.利用有限的机器存但降低了机器的执行效率2、构造编译程序应掌握 d 。
a.源程序b.目标语言c.编译方法d.以上三项都是3、变量应当 c 。
a.持有左值b.持有右值c.既持有左值又持有右值d.既不持有左值也不持有右值4、编译程序绝大多数时间花在 b 上。
a.出错处理b.词法分析c.目标代码生成d.管理表格5、 d 不可能是目标代码。
a.汇编指令代码b.可重定位指令代码c.绝对指令代码d.中间代码6、使用 a 可以定义一个程序的意义。
a.语义规则b.词法规则c.产生规则d.词法规则7、词法分析器的输入是 a 。
a.单词符号串b.源程序c.语法单位d.目标程序8、中间代码生成时所遵循的是- d 。
a.语法规则b.词法规则c.语义规则d.等价变换规则9、编译程序是对 d 。
a.汇编程序的翻译b.高级语言程序的解释执行c.机器语言的执行d.高级语言的翻译10、语法分析应遵循 b 。
a.语义规则b.语法规则c.构词规则d.等价变换规则解答1、将编译程序分成若干个“遍”是为了使编译程序的结构更加清晰,故选b。
2、构造编译程序应掌握源程序、目标语言及编译方法等三方面的知识,故选d。
3、对编译而言,变量既持有左值又持有右值,故选c。
4、编译程序打交道最多的就是各种表格,因此选d。
5、目标代码包括汇编指令代码、可重定位指令代码和绝对指令代码3种,因此不是目标代码的只能选d。
6、词法分析遵循的是构词规则,语法分析遵循的是语法规则,中间代码生成遵循的是语义规则,并且语义规则可以定义一个程序的意义。
因此选a。
7、b 8、c 9、d 10、c二、多项选择题1、编译程序各阶段的工作都涉及到bc 。
a.语法分析b.表格管理c.出错处理d.语义分析e.词法分析2、编译程序工作时,通常有abce 阶段。
1、给出下面语言的相应文法。
L1={a n b n c i|n≥1,i≥0}从n,i的不同取值来把L1分成两部分:前半部分是anbn:A→aAb|ab后半部分是ci:B→Bc|ε所以整个文法G1[S]可以写为:G1(S):S→AB ;A→aAb|ab ;B→cB|ε3、构造一个DFA,它接受 ={a,b}上所有包含ab的字符串。
(要求:先将正规式转化为NFA,再将NFA确定化,最小化)4、对下面的文法G:E →TE ’ E ’→+E|ε T →FT ’ T ’→T|εF →PF ’F ’→*F ’|ε P →(E)|a|b|∧(1)证明这个文法是LL(1)的。
(2)构造它的预测分析表。
(1)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,^,+,),#} (2)考虑下列产生式:'→+'→'→'→E E T T F F P E a b ||*|()|^||εεεFIRST(+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)文法. (3)+ * ( ) a b ^ # EE TE →'E TE →' E TE →' E TE →'E' '→+E E'→E ε'→E εTT F T →' T F T →' T F T →' T F T →'T' '→T ε'→T T '→T ε '→T T '→T T '→T T '→T εFF P F →'F P F →' F P F →' F P F →'F''→F ε '→'F F * '→F ε'→F ε '→F ε '→F ε '→F ε '→F εPP E →()P a → P b →P →^5、考虑文法: S →AS|b A →SA|a (1)列出这个文法的所有LR(0) 项目。
编译技术考试试题及答案一、填空题(每空1分,共20分)1.编译过程一般分为、、中间代码生成、和目标代码生成五个阶段。
2.语法分析最常用的两类方法是和分析法。
3.确定的有穷自动机是一个,通常表示为。
4.所谓最右推导是指。
5.语法分析器的任务是。
6.如果一个文法的任何产生式的右部都不含有的非终结符,则这种文法称为文法。
7.进行确定的自上而下语法分析要求语言的文法是无和的。
8.LR分析法是一种的语法分析方法。
9.根据优化对象所涉及的程序范围,代码优化分为、和等。
10.常用的优化技术包括:、、强度削弱、复写传播、等。
二、是非题(下列各题,你认为正确的,请在题后的括号内打“√”,错的打“×”。
每题2分,共20分)1.正规文法产生的语言都可以用上下文无关文法来描述。
…………………… ( )2.仅考虑一个基本块,不能确定一个赋值是否真是无用的。
………………………()3.如果一个文法是递归的,则其产生的语言的句子是无穷个。
…………………()4.四元式之间的联系是通过符号表实现的。
…………………………………………()5.文法的二义性和语言的二义性是两个不同的概念。
…………………………()6.一个LL( l)文法一定是无二义的。
………………………………………………( )7.在规范规约中用最左素短语来刻划可归约串。
……………………………… ( )8.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
…………… ( )9.编译程序是对汇编程序的翻译。
……………………………………()10.逆波兰法表示的表达式亦称前缀式。
…………………………………………… ( )三、简答题(每题5分,共15分)1、简述栈式存储管理策略;2、何谓DAG;3、何谓文法的二义性;四、给出下述文法对应的正规式(7分)S→ 0A| 1BA→1S | 1B→0S | 0五、已知文法G(E):E→T | E+T | E-TT→F | T*F | T/FF→(E) | i证明E+T*F是该文法的一个句型,并指出该句型的所有短语、直接短语和句柄。
《编译原理》课程复习资料一、判断题:1.一个上下文无关文法的开始符,可以是终结符或非终结符。
[ ]2.一个句型的直接短语是唯一的。
[ ]3.已经证明文法的二义性是可判定的。
[ ]4.每个基本块可用一个DAG表示。
[ ]5.每个过程的活动记录的体积在编译时可静态确定。
[ ]6.2型文法一定是3 型文法。
[ ]7.一个句型一定句子。
[ ]8.算符优先分析法每次都是对句柄进行归约。
[ ]9.采用三元式实现三地址代码时,不利于对中间代码进行优化。
[ ]10.编译过程中,语法分析器的任务是分析单词是怎样构成的。
[ ]11.一个优先表一定存在相应的优先函数。
[ ]12.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
[ ]13.递归下降分析法是一种自下而上分析法。
[ ]14.并不是每个文法都能改写成 LL(1)文法。
[ ]15.每个基本块只有一个入口和一个出口。
[ ]16.一个 LL(1)文法一定是无二义的。
[ ]17.逆波兰法表示的表达试亦称前缀式。
[ ]18.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
[ ]19.正规文法产生的语言都可以用上下文无关文法来描述。
[ ]20.一个优先表一定存在相应的优先函数。
[ ]21.3型文法一定是2 型文法。
[ ]22.如果一个文法存在某个句子对应两棵不同的语法树,则文法是二义性的。
[ ]二、填空题:1. 称为规范推导。
2.编译过程可分为,,,和五个阶段。
3.如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是。
4.从功能上说,程序语言的语句大体可分为语句和语句两大类。
5.语法分析器的输入是,其输出是。
6.扫描器的任务是从中识别出一个个。
7.符号表中的信息栏中登记了每个名字的有关的性质,如等等。
8.一个过程相应的DISPLAY表的内容为。
9.一个句型的最左直接短语称为句型的。
10.常用的两种动态存贮分配办法是动态分配和动态分配。
编译原理试题及答案一、选择题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. 论述编译器优化的几种常见方法。
答案:编译器优化主要包括以下几种方法:常量折叠、死代码消除、公共子表达式消除、循环优化、代码内联、寄存器分配等。
这些优化方法可以提高程序的执行效率,减少资源消耗,提高程序的运行速度。
结束语:本试题涵盖了编译原理的基本知识点,包括编译器的功能、编译过程的主要阶段、中间代码的作用以及编译器优化的方法。
希望考生能够通过本试题加深对编译原理的理解和掌握。
第一章:编译系统概述一.单选题1.编译程序前三个阶段完成的工作是( C )。
A.词法分析、语法分析和代码优化B.代码生成、代码优化和词法分析C.词法分析、语法分析、语义分析和中间代码生成D.词法分析、语法分析和代码优化2.编译程序绝大多数时间花在(D )上。
A.出错处理B.词法分析C.目标代码生成D.表格管理3.编译程序是对(C )。
A.汇编程序的翻译B.高级语言程序的解释执行C.高级语言的翻译D.机器语言的执行4.在使用高级语言编程时,首先可通过编译程序发现源程序的全部( A )错误。
A.语法B.语义C.语用D.运行二.填空题1.编译程序首先要识别出源程序中每个( 单词),然后再分析每个( 句子)并翻译其意义。
2.通常把编译过程分为分析前端与后端两大阶段。
词法、语法和语义分析是对源程序的( 分析),中间代码生成、代码优化与目标代码的生成则是对源程序的(综合)。
3.对编译程序而言,输入数据是( 源程序),输出结果是( 目标程序)。
4.对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、代码生成)报告的。
(1)else 没有匹配的if (语法分析)(2)数组下标越界(语义分析)(3)使用的函数没有定义(语法分析)(4)在数中出现非数字字符(词法分析)5.如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段:(编译阶段)和(运行阶段)。
如果编译程序生成的目标程序是汇编语言程序,则源程序的执行方式分成三个阶段:(编译阶段)(汇编阶段)和(运行阶段)。
6.编译程序在其工作过程使用最多的数据结构是(表),它记录着源程序中各种信息,以便查询或修改,在这些(表)中,尤以(符号表)最重要,它的生存期最长,使用也最频繁。
三.简述题:1.编译程序的工作分为那几个阶段?答:词法分析、语法分析和语义分析是对源程序进行的分析(称为编译程序的前端),而中间代码生成、代码优化和代码生成三个阶段合称为对源程序进行综合(称为编译程序的后端),它们从源程序的中间表示建立起和源程序等价的目标程序。
<编译原理>历年试题及答案一.(每项选择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) 什么是句子? 什么是语言?解答:句子——设G 是一个给定的文法,S 是文法的开始符号,如果S x (其中x ∈V T *),则称x 是文法的一个句子。
语言——语言是句子的集合。
或——设G[S]是给定文法,则由文法G 所定义的语言L(G)可描述为:L(G)={x │Sx,x ∈V T *} 。
2) DFA 与NFA 有何区别 ?解答:DFA 与NFA 的区别表现为两个方面:一是NFA 可以有若干个开始状态,而DFA 仅只有一个开始状态。
另一方面,DFA 的映象M 是从K ×∑到K ,而NFA 的映象M 是从K ×∑到K 的子集,即映象M 将产生一个状态集合(可能为空集),而不是单个状态。
3) 自顶向下的语法分析方法的基本思想是什么?解答:从文法的开始符号开始,根据给定的输入串并按照文法的产生式一步一步的向下进行直接推导,试图推导出文法的句子,使之与给定的输入串匹配。
4) 自底向上的语法分析方法的基本思想是什么?解答:从给定的输入串(终结符串)开始,根据文法的规则一步一步的向上进行直接归约,试图归约到文法的开始符号。
5) 一个上下文无关文法G 包括哪四个组成部分?解答:一组非终结符号,一组终结符号,一个开始符号,以及一组产生式。
6) 在自底向上的语法分析方法中,分析的关键是什么?解答:关键是寻找句柄。
7)在自顶向下的语法分析方法中,分析的关键是什么?解答:关键是选择候选式。
8)什么是属性文法?答:是在上下文无关文法的基础上,为每个文法符号(含终结符和非终结符)配备若干个属性值,对文法的每个产生式都配备了一组属性计算规则(称为语义规则)。
在语法分析过程中,完成语义规则所描述的动作,从而实现语义处理。
一个属性文法形式的定义为一个三元组AG,AG=(G,V,E)。
其中G为一个上下文无关文法;V为属性的有穷集;E为一组语义规则。
9)语法制导翻译语法制导翻译:定义翻译所必须的语义属性和语义规则,一般不涉及计算顺序。
编译原理期末考试复习题(含答案)一、选择题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、编译方式与解释方式的根本区别在于(是否生成目标代码)。
2、对编译程序而言,输入数据是(源程序),输出结果是(目标程序)。
3、如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段:(编译阶段)和(运行阶段)。
4、如果编译程序生成的目标程序是汇编语言程序,则源程序的执行分成三个阶段:(编译阶段)、(汇编阶段)和(运行阶段)。
5、自顶向下语法分析方法会遇到的主要问题有(回溯)和((左递归带来的)无限循环)。
6、LL(k)分析法中,第一个L的含义是(从左到右进行分析),第二个L的含义是(每次进行最左推导),“k”的含义是(向输入串中查看K个输入符号)。
7、LL(1)分析法中,第一个L的含义是(从左到右进行分析),第二个L的含义是(每次进行最左推导),“1”的含义是(向输入串中查看1个输入符号)。
8、自顶向下语法分析方法的基本思想是:从(识别符号)出发,不断建立(直接推导),试图构造一个推导序列,最终由它推导出与输入符号相同的(符号串)。
9、自底向上语法分析方法的基本思想是:从待输入的符号串开始,利用文法的规则步步向上进行(直接归约),试图(归约)到文法的(识别符号|开始符号)。
10、LR(0)分析法的名字中,“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“0”的含义是(向貌似句柄的符号串后查看0个输入符号)。
11、LR(1)分析法的名字中,“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“1”的含义是(向貌似句柄的符号串后查看1个输入符号)。
12、SLR(1)分析法的名字中,“S”的含义是(简单的),“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“1”的含义是(向貌似句柄的符号串后查看1个输入符号)。
13、在编译过程中,常见的中间语言形式有(逆波兰表示)、(三元式)、(四元式)和(树形表示)。
第一章引论1.编译过程的阶段由词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成六个阶段2.编译程序的概念3.编译程序的结构例:(B)不是编译程序的组成部分。
A. 词法分析器;B. 设备管理程序C. 语法分析程序;D. 代码生成程序4.遍的概念对源程序(或其中间形式)从头至尾扫描一次并进行有关加工处理,生成新的中间形式或最终目标程序,称为一遍。
5.编译程序与解释程序的区别例:解释程序和编译程序是两类程序语言处理程序,它们的主要区别在于(D)。
A. 单用户与多用户的差别B. 对用户程序的差错能力C. 机器执行效率D. 是否生成目标代码第三章文法和语言文法的概念字母表、符号串和集合的概念及运算例:(ab|b)*c 与下面的那些串匹配?(ACD)A. ababbc;B. abab;C. c;D. babc;E. aaabc例:ab*c*(a|b)c 与后面的那些串匹配?(BC)A.acbbcB.abbcacC.abcD.acc例:(a|b)a+(ba)*与后面的那些串匹配? (ADE)A.baB.bbaC.ababaD.aaE.baa文法的定义(四元组表示)文法G定义为四元组(V N,V T,P,S)V N:非终结符集V T:终结符集P:产生式(规则)集合S:开始符号(或识别符号)例:给定文法,A::= bA | cc,下面哪些符号串可由其推导出(①② ⑤)。
①cc ②b*cc ③b*cbcc ④bccbcc ⑤bbbcc什么是推导例:已知文法G:E->E+T|E-T|TT->T*F|T/F|FF->(E)|i试给出下述表达式的推导:i*i+i 推导过程:E->E+T->T+T->T*F+T->F*F+T->i*F+T->i*i+T->i*i+F->i*i+i●句型、句子的概念例:假设G一个文法,S是文法的开始符号,如果S=>*x,则称x是句型。
编译概念复习题(参考答案)一、填空题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.编译程序不能够检查、处理的错误是程序中的。
A.静态语义错误B.动态语义错误C.语法错误D.词法错误7.开发一个编译程序应掌握。
A.源语言B.目标语言C.编译技术D.以上三项都是8.中间代码生成所依据的是语言的。
A.词法规则B.语法规则C.语义规则D.产生规则10.测试一个编译程序时使用的测试数据是。
A.源程序B.中间代码C.目标程序D.任意数据11.可以作为目标代码的语言是。
A.高级语言B.中间语言C.低级语言D.程序设计语言12.编译程序检查、处理源程序中的错误具体指的是。
A.词法错误B.语法错误C.语义错误D.以上三项都是13.同正则表达式(a | b)+等价的正则表达式是。
A.(a | b) * B.(a | b) (a | b) *C.(a b)* (a b) D.(a | b)| (a | b)*14.词法分析器的输出结果是。
A.单词自身B.单词的机内符C.单词的词义信息D.单词的词法信息15.如果一个正则表达式所代表的集合是无穷的,则它必含有运算。
A.连接运算:“·”B.或运算:“|”C.闭包运算:“*”D.括弧:“(”和“)”16.称有限自动机A1和A2等价是指。
A.A1和A2都是定义在一个字母表Σ上的有限自动机B.A1和A2状态数和有向边数相等C.A1和A2状态数或有向边数相等D.A1和A2所能识别的字符串集合相同17.DFA同NFA的不同之处是。
编译概念复习题(参考答案)一、填空题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.编译程序不能够检查、处理的错误是程序中的。
A.静态语义错误B.动态语义错误C.语法错误D.词法错误7.开发一个编译程序应掌握。
A.源语言B.目标语言C.编译技术D.以上三项都是8.中间代码生成所依据的是语言的。
A.词法规则B.语法规则C.语义规则D.产生规则10.测试一个编译程序时使用的测试数据是。
A.源程序B.中间代码C.目标程序D.任意数据11.可以作为目标代码的语言是。
A.高级语言B.中间语言C.低级语言D.程序设计语言12.编译程序检查、处理源程序中的错误具体指的是。
A.词法错误B.语法错误C.语义错误D.以上三项都是13.同正则表达式(a | b)+等价的正则表达式是。
A.(a | b) * B.(a | b) (a | b) *C.(a b)* (a b) D.(a | b)| (a | b)*14.词法分析器的输出结果是。
A.单词自身B.单词的机内符C.单词的词义信息D.单词的词法信息15.如果一个正则表达式所代表的集合是无穷的,则它必含有运算。
A.连接运算:“·”B.或运算:“|”C.闭包运算:“*”D.括弧:“(”和“)”16.称有限自动机A1和A2等价是指。
A.A1和A2都是定义在一个字母表Σ上的有限自动机B.A1和A2状态数和有向边数相等C.A1和A2状态数或有向边数相等D.A1和A2所能识别的字符串集合相同17.DFA同NFA的不同之处是。
A.DFA的一个状态发出的边不能相同,而NFA的一个状态可以发出多条相同的边B.DFA可以含有多个终止状态,而NFA可以含有多个初始状态C.DFA和NFA 所描述的字符串集合不同D.DFA同NFA使用的构造技术和对象不同18.同正则表达式(a | b)*等价的正则表达式是。
A.(a | b)+ B.a* | b*C.(a b)*D.(a* | b*)+19.词法分析器的加工对象是。
A.中间代码B.单词C.源程序D.元程序20.称正则表达式R1和R2等价是指。
A.R1和R2都是定义在一个字母表Σ上的正则表达式B.R1和R2中使用的运算符相同C.R1和R2代表一个正则集D.R1和R2代表不同的正则集21.如果一个有限自动机所能识别的字符串集合是无穷的,则它必。
A.含有多个状态B.含有多条有向边C.含有多个终止状态D.含有回路22.DFA同NFA的不同之处是。
A.DFA只能含有一个终止状态,而NFA可以含有多个终止状态B.DFA只能含有一个初始状态,而NFA可以含有多个初始状态C.DFA和NFA 所描述的字符串集合不同D.DFA同NFA使用的构造技术和对象不同23.同正则表达式a*b*等价的文法是。
A.G1:S→aS|bS|εB.G2:S→aSb|εC.G3:S→aS|Sb|εD.G4:S→abS|ε24.如果一个文法G是二义性文法,则必存在某个句子x∈L(G),该句子。
A.存在两个不同的最右推导和一个最左推导B.存在两个不同的最左推导和一个最右推导C.最左推导和最右推导不同D.存在两个不同的最左推导和两个不同的最右推导25.称文法G1和G2等价是指。
A.L(G1)≡L(G2) B.L(G1)=L(G2)C.L(G1)⊆L(G2) D.L(G2)⊆L(G1)26.由文法的开始符出发通过若干步(包括0步)推导产生的文法符号序列是。
A.语言B.句型C.句子D.句柄27.最左简单子树的叶结点,自左至右排列组成句型的。
A.短语B.简单短语C.句柄D.素短语28.CFG文法G:S→[ S ] | [ ]所产生的语言是。
A.[ m ] n (m,n>0)B.[ m ] n (m,n>1)C.[ m ] m(m≥1)D.[ n ] n(n≥0)29.如果一个文法G是无二义性文法,则对任一句子x∈L(G),该句子。
A.可能存在两个不同的最右推导B.可能存在两个不同的最左推导C.最左推导和最右推导不同D.仅存在一个最左推导和一个最右推导30.正则文法的句型具有的特点是。
A.句型中仅含一个非终结符或不含非终结符B.句型中仅含一个非终结符或只含终结符C.句型中仅含一个非终结符且在句型的最右端,或不含非终结符D.句型中可含多个非终结符且在句型的最左端,或不含非终结符31.规范推导是。
A.最右推导的逆过程B.最左推导C.最左归约的逆过程D.最右规约的逆过程32.在自顶向下语法分析中,要求文法满足。
A.无左递归B.无左公因子C.无右递归D.无回溯33.一个文法G是LL(1)文法的充要条件是对每一个非终结符A的任意两个不同产生式A→α | β,有。
A.FIRST(α)∩FIRST(β)=ΦB.FIRST(α)∩FOLLOW(A)=ΦC.SELECT(A→α)∩SELECT(A→β)=ΦD.SELECT(A→α)∩SELECT(A→β)≠Φ34.一个文法是简单优先文法应满足的条件是。
⑴没有形如A→…BC…的产生式(A,B,C∈V N)⑵没有形如A→ε产生式⑶任意两个终结符号之间至多存在一种优先关系⑷没有相同的产生式右部可选项有:A.⑴⑵⑶B.⑵⑶⑷C.⑴⑶⑷D.⑴⑵⑷35.算符优先分析法每次都是对进行归约。
A.短语B.最左素短语C.素短语D.句柄36.一个文法G,若,则称它是LL(1)文法。
A.G中不含左递归B.G无二义性C.G的LL(1)分析表不含多重定义D.G中产生式不含左公因子37.设有文法G=({S},{a},{ S→SaS | ε},S),该文法是。
A.LL(1)文法B.LR(0)文法C.算符优先文法D.二义性文法38.若B为非终结符,则A→α·Bβ为项目。
A.移入B.待约C.归约D.接受39.LR分析器核心部分是一张分析表,该表由组成。
A.ACTION表B.GOTO表C.LL(1)分析表D.ACTION表和GOTO表40.在递归子程序方法中,如果文法存在左递归,则会使分析过程产生。
A.回溯B.非法调用C.有限次调用D.无限循环41.编译程序的语法分析器必须输出的信息是。
A.语法错误信息B.语法规则信息C.语法分析过程D.语句序列42.一个文法是算符优先文法应满足的条件是。
⑴没有形如A→…BC…的产生式(A,B,C∈V N)⑵没有形如A→ε产生式⑶任意两个终结符号之间至多存在一种优先关系⑷没有相同的产生式右部可选项有:A.⑴B.⑴⑵C.⑴⑵⑶D.⑴⑵⑶⑷43.算符优先文法与算符优先函数的关系描述中正确的是。
A.一个算符优先文法一定存在算符优先函数与之对应B.一个算符优先文法一定存在多对算符优先函数与之对应C.一个算符优先文法一定存在有限对算符优先函数与之对应D.一个算符优先文法可能存在也可能不存在算符优先函数与之对应44.LL(1)分析法中的“1”的含义是向输入串中查看一个输入符号,其目的是。
A.确定最左推导B.确定可归前缀C.确定分析一步使用的产生式右部匹配串D.确定是否推导45.若a为终结符,则A→α• aβ为项目。
A.移入B.待约C.归约D.接受46.可归前缀是指。
A.规范句型的前缀B.活前缀C.含有句柄的活前缀D.句柄47.下述关于标识符和名字的叙述中,正确的为。
A.标识符有一定的含义B.名字有确切的属性C.名字是一个没有意义的字符序列D.标识符和名字是等同的48.下列错误属于静态语义错误的是。
A.括弧不配对B.出现非法字符C.类型不相容D.溢出49.属于标识符“种属”属性信息的描述是。
A.整型B.变量C.地址D.指针50.不属于标识符“类型”属性信息的描述是。
A.整型B.实型C.指针D.类型51.函数表达式sqrt (-8)是错误的,它属于错误。
A.语法B.词法C.静态语义D.动态语义52.有一语法制导翻译算法如下:S→bAb { print “1”}A→(B { print “2”}A→a { print “3”}B→aA) { print “4”}若输如序列为b(a(a(aa)))b,且采用自底向上的分析方法,则输出序列为。
A.32224441 B.34242421C.12424243 D.3444221253.使用可以把语句翻译成四元式序列。
A.词法规则B.语法规则C.语义规则D.等价变换规则54.在语法制导翻译中不采用拉链—回填技术的语句是。
A.转向语句B.赋值语句C.条件语句D.循环语句55.下面逆波兰式(后缀式)中,能正确表示算术表达式a+b+c+d的是。
A.abcd+++ B.abc+d++C.ab+cd++ D.ab+c+d+二、判断题(正确打(√)、错误打(×))1.(√)源程序同目标程序是等价关系。
2.(×)用高级语言编写的源程序都必须通过编译,产生目标程序后才能运行。
3.(×)高级语言程序到低级语言程序的转换是结构上的变换。
4.(×)多遍扫描的编译程序的多遍是指多次重复读源程序。
5.(√)解释程序虽然不产生目标程序,但它可能产生中间代码。
6.(√)DFA同NFA等价。
7.(×)使用正则运算能够描述定义在字母表 上的所有符号串集合。
8.(×)一个有限自动机中,有且仅有一个初始状态。
9.(×)一个有限自动机中,有且仅有一个终止状态。
10.(×)有限自动机的作用是实现单词的生成。
11.(√)使用有限自动机可以实现单词的识别。
12.(√)对任一正则表达式e,都存在一个DFA A,使L(e)=L(A)。
13.(√)最小化的DFA,它的状态个数最少。
14.(√)如果一个语言的句子是无穷的,则定义该语言的文法一定是递归的。
15.(×)在编译技术中由于使用前后文无关文法描述程序设计语言,所以程序设计语言是前后文无关语言。
16.(√)一个语言的文法是不惟一的。
17.(×)二义性文法是可以判定的。
18.(×)每个非终结符产生的终结符号串集都是该语言子集。
19.(√)规范归约是最右推导的逆过程。
20.(×)语法分析器可以检查程序中出现的所有错误。
21.(√)一个LL(1)文法一定是无二义性和无回溯文法。
22.(×)一个素短语一定是短语,反之一个短语也是素短语。
23.(√)所有LR分析器的总控程序都是一样的,只是分析表各有不同。