编译模拟试题及答案
大学计算机编译原理练习题及答案

大学计算机编译原理练习题及答案编译原理是计算机科学中的重要基础课程,其目的是让学生了解编译器的工作原理、构造与实现方法。
为了帮助同学们更好地掌握编译原理,以下是一些练习题及其答案,供大家参考学习。
1. 什么是编译器?它的主要功能是什么?编译器是一种将源代码(高级语言)转化为目标代码(机器语言)的软件工具。
它的主要功能包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等。
2. 简要解释编译器的工作原理。
编译器的工作原理可以分为以下几个步骤:a. 词法分析:将源代码分解成各个词素(tokens)的序列。
b. 语法分析:根据源代码的语法规则,构建语法树。
c. 语义分析:对语法树进行语义检查,确保程序的合法性。
d. 中间代码生成:将语法树转化为中间代码,方便后续的优化。
e. 代码优化:对中间代码进行各种优化,提高程序的性能和效率。
f. 目标代码生成:将优化后的中间代码转化为目标代码(机器语言)。
3. 解释以下概念:词法单元、词法分析器、上下文无关文法、语法分析器。
- 词法单元:是最小的语法单元,是词法分析器生成的结果。
可以是标识符、关键字、常量、运算符等。
- 词法分析器:负责将源代码分解为词法单元序列的工具,将输入的字符流转化为记号流。
- 上下文无关文法:是一种形式语言,用于描述程序中的语法结构,不依赖于上下文环境。
常用于语法分析器进行代码语法分析和生成语法树。
- 语法分析器:根据给定的上下文无关文法,对词法分析器生成的记号流进行语法检查和语法树的构建。
4. 下面是一个简化的算术表达式的上下文无关文法描述,请写出其对应的语法树。
```<expression> -> <term> | <expression> + <term> | <expression> - <term> <term> -> <factor> | <term> * <factor> | <term> / <factor><factor> -> <number> | (<expression>)<number> -> [0-9]+```例如,对于表达式 "3 + 5 * (2 - 1)",对应的语法树为:```expression/ \expression +/ \ / \term + term| \ / |factor | factor| | |3 term factor/ \ |factor 5 2|term|factor|1```5. 简要解释语义分析的主要任务。
编译原理模拟试题六

《编译原理》模拟试题六一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)1.设r和s分别是正规式,则有L(r|s)=L(r)L(s)。
(×)2.确定的自动机以及不确定的自动机都能正确地识别正规集。
(√)3.词法分析作为单独的一遍来处理较好。
(× )4.构造LR分析器的任务就是产生LR分析表。
(√)5.规范归约和规范推导是互逆的两个过程。
(× )6.同心集的合并有可能产生新的“移进”/“归约”冲突。
(× )7.LR分析技术无法适用二义文法。
(× )8.树形表示和四元式不便于优化,而三元式和间接三元式则便于优化。
(×)9.程序中的表达式语句在语义翻译时不需要回填技术。
(√)10.对中间代码的优化依赖于具体的计算机。
(× )二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分)1.编译程序绝大多数时间花在_____ 上。
A.( ) 出错处理 B.( ) 词法分析C.( ) 目标代码生成D.( ) 表格管理2.编译程序是对_____。
A.( ) 汇编程序的翻译 B.( ) 高级语言程序的解释执行C.( ) 机器语言的执行D.( ) 高级语言的翻译3.采用自上而下分析,必须_____。
A.( ) 消除左递归 B.( ) 消除右递归C.( ) 消除回溯 D.( ) 提取公共左因子4.在规范归约中,用_____来刻画可归约串。
A.( )直接短语B.( )句柄C.( )最左素短语D.( )素短语5.若a为终结符,则A->α ·aβ为_____项目。
A.( )归约B.( ) 移进C.( ) 接受D.( ) 待约6.间接三元式表示法的优点为_____。
A.( ) 采用间接码表,便于优化处理B.( ) 节省存储空间,不便于表的修改C.( ) 便于优化处理,节省存储空间 D.( ) 节省存储空间,不便于优化处理7.基本块内的优化为_____。
编译概念复习题(参考答案)

编译概念复习题(参考答案)一、填空题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

编译原理与技术模拟试题一一、填空题(20分,每空2分)1.1编译程序的工作过程可划分为词法分析、语法分析、、中间代码生成、代码优化、等阶段,一般在阶段对表达式中运算对象的类型进行检查。
答案:语义分析、目标代码生成、语义分析解释:要求掌握编译器的工作原理和特点。
编译和解释方式是翻译高级程序设计语言的两种基本方式。
解释程序也称为解释器,它或者直接解释执行源程序,或者将源程序翻译成某种中间表示形式后再加以执行;而编译程序(编译器)则首先将源程序翻译成目标语言程序,然后在计算机上运行目标程序。
编译过程包含词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成,以及符号表管理和出错处理。
表达式的类型信息属于语义信息,所以在语义分析阶段进行类型检查。
1.2 和预测分析法是自上而下的语法分析方法。
答案:递归下降法解释:语法分析的任务是根据语言的语法规则,分析单词串是否构成短语和句子,即表达式、语句和程序等基本语言结构,同时检查和处理程序中的语法错误。
根据语法树(或分析树)的建立方式,语法分析可分为自上而下分析和自下而上分析两类,递归下降分析和预测分析属于自上而下的语法分析方法。
1.3常用的存储分配策略有存储分配和动态存储分配,其中,动态存储分配策略包括分配和分配。
答案:静态、栈、堆解释:编译器怎样对存储空间进行组织和采用什么样的存储分配策略,很大程度上取决于程序设计语言中所采用的机制。
编译器具体实现时,根据语言机制的特性,采用静态分配策略、栈分配策略和堆分配策略三种方式的其中若干种。
静态分配策略是指编译时安排所有数据对象的存储,即绑定是静态确定的;栈分配策略是指按栈的方式管理运行时的存储;堆分配策略是指在运行时根据要求从堆数据区动态地分配和释放存储。
1.4移进、归约是分析中的典型操作。
答案:自下而上或LR解释:自下而上分析的一般思路是从句子ω开始,从左到右扫描ω,反复用产生式的左部替换产生式的右部、谋求对ω的匹配,最终得到文法的开始符号,或者发现一个错误。
编译练习题答案

一、填空题:1-01.编译程序的工作过程一般可以划分为词法分析,语法分析,语义分析,之间代码生成,代码优化等几个基本阶段,同时还会伴有表格处理和出错处理 .1-02.若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序 ,则其翻译程序称为编译程序.1-03.编译方式与解释方式的根本区别在于是否生成目标代码 .1-04.翻译程序是这样一种程序,它能够将用甲语言书写的程序转换成与其等价的用乙语言书写的程序 .1-05.对编译程序而言,输入数据是源程序 ,输出结果是目标程序 .1-06.如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段: 编译阶段和运行阶段 .如果编译程序生成的目标程序是汇编语言程序,则源程序的执行分为三个阶段: 编译阶段 ,汇编阶段和运行阶段 .1-07.若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序。
1-08.一个典型的编译程序中,不仅包括词法分析、语法分析、中间代码生成、代码优化、目标代码生成等五个部分,还应包括表格处理和出错处理。
其中,词法分析器用于识别单词。
1-09.编译方式与解释方式的根本区别为是否生成目标代码。
2-01.所谓最右推导是指:任何一步α β都是对α中最右非终结符进行替换的。
2-02.一个上下文无关文法所含四个组成部分是一组终结符号、一组非终结符号、一个开始符号、一组产生式。
2-03.产生式是用于定义语法成分的一种书写规则。
2-04.设G[S]是给定文法,则由文法G所定义的语言L(G)可描述为: L(G)={x│S x,x∈V T*} 。
2-05.设G是一个给定的文法,S是文法的开始符号,如果S x(其中x∈V*),则称x是文法的一个句型。
2-06.设G是一个给定的文法,S是文法的开始符号,如果S x(其中x∈V T*),则称x是文法的一个句子。
3-01.扫描器的任务是从源程序中识别出一个个单词符号。
编译原理模拟试题1和2的答案

编译原理模拟试题1和2的答案⼀、是⾮题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.后缀式--⼀种把运算量写在前⾯,把算符写在后⾯的表⽰表达式的⽅法。
四、简述题1、考虑下⾯程序…………Var a:integer;Procedure S(X);Var X:integer;Begina:=a+1;X:=a+XBegina:=5;S(a);Print(a)End.试问:若参数传递⽅式分别采取传名和传值时,程序执⾏后输出a的值是什么?答:传名:a=12传值:a=62、画出Pascal中实数(不带正负号,可带指数部分)的状态转换图。
编译原理试题及答案

《编译原理》模拟题一.单选题1.()是两类程序语言处理程序.A.高级语言程序和低级语言程序B.解释程序和编译程序C.编译程序和操作系统D.系统程序和应用程序[答案]:B2.解释程序处理语言时,大多数采用的是()方法.A.源程序命令被逐个直接解释执行B.先将源程序转化为中间代码,再解释执行C.先将源程序解释转化为目标程序,再执行D.以上方法都可以[答案]:A3.()是一种典型的解释型语言.A.BASICB.CC.FORTRAND.PASCAL[答案]:A4.与编译系统相比,解释系统().A.比较简单,可移植性好,执行速度快B.比较复杂,可移植性好,执行速度快C.比较简单,可移植性差,执行速度慢D.比较简单,可移植性好,执行速度慢[答案]:D5.编译程序是一种().A.汇编程序B.翻译程序C.解释程序D.目标程序[答案]:B6.编译程序是对().A.汇编程序的翻译B.高级语言程序的解释执行C.机器语言的执行D.高级语言的翻译[答案]:D7.用高级语言编写的程序经编译后产生的程序叫().A.源程序B.目标程序C.连接程序D.解释程序[答案]:B8.将编译程序分成若干个“遍”是为了().A.提高程序的执行效率B.使程序的结构更加清晰C.利用有限的机器内存并提高机器的执行效率D.利用有限的机器内存但降低了机器的执行效率[答案]:B9.构造编译程序应掌握().A.源程序B.目标语言C.编译方法D.以上三项都是[答案]:D10.通常一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括().A.模拟执行器B.解释器C.表格处理和出错处理D.符号执行器[答案]:C11.编译程序绝大多数时间花在()上.A.出错处理B.词法分析C.目标代码生成D.管理表格[答案]:D12.程序的基本块是指().A.一个子程序B.一个仅有一个入口和一个出口的语句C.一个没有嵌套的程序段D.一组顺序执行的程序段,仅有一个入口和一个出口[答案]:D13.变量应当().B.持有右值C.既持有左值又持有右值D.既不持有左值也不持有右值[答案]:C14.数组的内情向量中肯定不含有数组的()的信息.A.维数B.类型C.维上下界D.各维的界差[答案]:A15.一个上下文无关文法G包括四个组成部分:一组终结符,一组非终结符,一个开始符号,以及一组().A.字符串B.产生式C.非开始符号D.文法[答案]:B16.一个文法所描述的语言是().A.唯一的B.不唯一的C.可能唯一,也可能不唯一D.都不对[答案]:A17.文法G产生的()的全体是该文法描述的语言.A.句型B.终结符集C.非终结符集D.句子[答案]:D18.若文法G定义的语言是无限集,则文法必然是().A.递归的B.前后文无关的C.二义性的D.无二义性的[答案]:A19.文法分为四种类型,即0型,1型,2型,3型.其中2型文法是().A.短语文法C.上下文有关文法D.上下文无关文法[答案]:C20.四种形式语言文法中,1型文法又称为()文法.A.短语文法B.正则文法C.上下文有关文法D.上下文无关文法[答案]:D21.正规式M1和M2等价是指().A.M1和M2的状态数相等B.Ml和M2的有向弧条数相等C.M1和M2所识别的语言集相等D.Ml和M2状态数和有向弧条数相等[答案]:C22.词法分析器的输出结果是().A.单词的种别编码B.单词在符号表中的位置C.单词的种别编码和自身值D.单词自身值[答案]:C23.词法分析器用于识别().A.字符串B.语句C.单词D.标识符[答案]:C24.扫描器所完成的任务是从字符串形式的源程序中识别出一个个具有独立含义的最小语法单位即().A.字符B.单词C.句子D.句型[答案]:B25.一个句型中称为句柄的是该句型的最左().A.非终结符号B.短语D.直接短语[答案]:D26.下推自动机识别的语言是().A.0型语言B.1型语言C.2型语言D.3型语言[答案]:C27.如果文法G是无二义的,则它的任何句子α().A.最左推导和最右推导对应的语法树必定相同B.最左推导和最右推导对应的语法树可能不同C.最左推导和最右推导必定相同D.可能存在两个不同的最左推导,但它们对应的语法树相同[答案]:A28.采用自上而下分析,必须().A.消除左递归B.消除右递归C.消除回溯D.提取公共左因子[答案]:C29.在规范归约中,用()来刻画可归约串.A.直接短语B.句柄C.最左素短语D.素短语[答案]:B30.若a为终结符,则A->α·aβ为()项目.A.归约B.移进C.接受D.待约[答案]:B31.高级语言编译程序常用的语法分析方法中,递归下降分析法属于()分析方法.A.自左向右B.自顶向下C.自底向上D.自右向左32.在通常的语法分析方法中,()特别适用于表达式的分析.A.算符优先分析法B.LR分析法C.递归下降分析法D.LL(1)分析法[答案]:A33.语法分析器则可以发现源程序中的().A.语义错误B.语法和语义错误C.错误并校正D.语法错误[答案]:D34.后缀式ab+cd+/可用表达式()来表示.A.a+b/c+dB.(a+b)/(c+d)C.a+b/(c+d)D.a+b+c/d[答案]:B35.中间代码生成时所依据的是().A.语法规则B.词法规则C.语义规则D.等价变换规则[答案]:C36.()和代码优化部分不是每个编译程序都必需的.A.语法分析B.中间代码生成C.词法分析D.目标代码生成[答案]:B37.常用的中间代码形式不含().A.三元式B.四元式C.逆波兰式D.语法树[答案]:D38.代码优化的目的是().A.节省时间B.节省空间C.节省时间和空间把编译程序进行等价交换[答案]:C39.优化可生成()的目标代码.A.运行时间较短B.占用存储空间较小C.运行时间短但占用内存空间大D.运行时间短且占用存储空间小[答案]:D40.下列()优化方法不是针对循环优化进行的.A.强度削弱B.删除归纳变量C.删除多余运算D.代码外提[答案]:C41.基本块内的优化为().A.代码外提,删除归纳变量B.删除多余运算,删除无用赋值C.强度削弱,代码外提D.循环展开,循环合并[答案]:B42.代码生成阶段的主要任务是().A.把高级语言翻译成汇编语言B.把高级语言翻译成机器语言C.把中间代码变换成依赖具体机器的目标代码D.把汇编语言翻译成机器语言[答案]:C43.在目标代码生成阶段,符号表用于().A.目标代码生成B.语义检查C.语法检查D.地址分配[答案]:D44.程序所需的数据空间在程序运行前就可确定,称为()管理技术.A.动态存储B.栈式存储C.静态存储D.堆式存储[答案]:C45.堆式动态分配申请和释放存储空间遵守()原则.A.先请先放B.先请后放C.后请先放D.任意[答案]:D46.编译程序使用()区别标识符的作用域.A.说明标识符的过程或函数名B.说明标识符的过程或函数的静态层次C.说明标识符的过程或函数的动态层次D.标识符的行号[答案]:B47.生成能被5整除的正整数的文法G[Z]是().A.G(Z):Z→AC,A→BA|B,B→0|1|2|…|9,C→0|5B.G(Z):Z→AC,A→BA|ε,B→0|1|2|…|9,C→0|5C.G(Z):Z→AC|5,A→BA|B,B→0|1|2|…|9,C→0|5D.G(Z):Z→AC|C,A→BA|B,B→0|1|2|…|9,C→0|5[答案]:C48.符号串ab1b2是给定文法G[A]:A→aB,B→bB|b的句子,该句子的句柄是().A.b1B.b2C.cD..b1b2[答案]:B49.一般程序设计语言的定义都涉及()三个方面.①语法②语义③语用④程序基本符号的确定A.①,②和③B.①,②和④C.①,③和④D.②,③和④[答案]:B50.下述语句类中,()在编译阶段通常不产生可执行代码.A.赋值语句B.流程控制语句C.说明语句D.输入输出语句[答案]:C51.算符文法是指()的文法.①没有形如U→...VW...的规则(U,V,W错误!未找到引用源。
《编译原理》期末考试题库含答案.docx

《编译原理》模拟试题一一、是非题(请在括号内,正确的划错误的划X)(每个2分,共20分)1•计算机高级语言翻译成低级语言只有解释一种方式。
(X)2.在编译中进行语法检查的目的是为了发现程序中所有错误。
(X)3.甲机上的某编译程序在乙机上能直接使用的必要条件是甲机和乙机的操作系统功能完全相同。
(丁 )4.正则文法其产生式为A->a , A->Bb, A.BGVN , a、beVT o (X)5.每个文法都能改写为LL(1)文法。
(V)6.递归下降法允许任一非终极符是直接左递归的。
(V)7.算符优先关系表不一定存在对应的优先函数。
(X)8.自底而上语法分析方法的主要问题是候选式的选择。
(X)9.LR法是自顶向下语法分析方法。
(X)10.简单优先文法允许任意两个产生式具有相同右部。
(X)二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分)1.一个编译程序中,不仅包含词法分析,_____ ,中间代码生成,代码优化,目标代码生成等五个部分。
A.()语法分析B.()文法分析C.()语言分析D.()解释分析2.词法分析器用于识别_____ oA.()字符串B.()语句C.()单词D.()标识符3 •语法分析器则可以发现源程序中的______ oA.()语义错误B.()语法和语义错误C.()错误并校正D.()语法错误4.下面关于解释程序的描述正确的是。
(1) 解释程序的特点是处理程序时不产生目标代码(2) 解释程序适用于COBOL 和FORTRAN 语言(3) 解释程序是为打开编译程序技术的僵局而开发的A. ( ) (1) (2)B. () (1)C. () (1)⑵(3)D.()⑵⑶5. _________________________________________ 解释程序处理语言时,大多数采用的是 ___________________________________ 方法。
《编译原理》模拟试题五.doc

《编译原理》模拟忒题五一、是非题(请在括号内,正确的划4错误的划X)(每个2分,共20分)1.编译程序是对高级语言程序的解释执行。
(x)2.一个有限状态自动机中,有且仅有一个唯一的终态。
(x)3.一个算符优先文法可能不存在算符优先函数与之对应。
R)4.语法分析时必须先消除文法中的左递归。
(x)5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。
(V)9.两个正规集相等的必要条件是他们对应的正规式等价。
(x)10.一个语义子程序描述了一个文法所对应的翻译工作。
(x)二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分)1.词法分析器的输出结果是oA.单词的种别编码B.单词在符号表中的位置C.单词的种别编码和自身值D.单词自身值2.正规式M 1和M2等价是指-A. ()M1和M2的状态数相等B. ()M1和M2的有向边条数相等C.()M1和M2所识别的语言集相等D. ()M1和M2状态数和有向边条数相等3.文法G: S—xSx|y所识别的语言是oA. ( ) xyxB. ()(xyx)*C・()xnyxn(n>0) D. ()x*yx*4.如果文法G是无二义的,则它的任何句子a□A.()最左推导和最右推导对应的语法树必定相同B.()最左推导和最右推导对应的语法树可能不同c.()最左推导和最右推导必定相同D.()可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握-A.()源程序B.()目标语言C.()编译方法D.()以上三项都是8.优化可生成一运行时间短且占用存储空间小—的目标代码。
三、填空题(每空1分,共10分)1.计算机执行用高级语言编写的程序主要有两种途径:—解释_和_编译—o2.扫描器是_词法分析器—,它接受输入的—源程序—,对源程序进行—词法分析—并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用。
编译原理模拟题

《编译原理》模拟题(补)一.单项选择题1.()是两类程序语言处理程序。
A. 高级语言程序和低级语言程序B. 解释程序和编译程序C. 编译程序和操作系统D. 系统程序和应用程序2. 编译程序前三个阶段完成的工作是()。
A. 词法分析、语法分析和代码优化B. 代码生成、代码优化和词法分析C. 词法分析、语法分析、语义分析和中间代码生成D. 词法分析、语法分析和代码优化3. 一个上下文无关文法G包括四个组成部分:一组终结符,一组非终结符,一个开始符号,以及一组()。
A. 字符串B. 产生式C. 非开始符号D. 文法4. 词法分析器的输出结果是()。
A. 单词的种别编码B. 单词在符号表中的位置C. 单词的种别编码和自身值D. 单词自身值5. 一个句型中称为句柄的是该句型的最左()。
A. 非终结符号B. 短语C. 句子D. 直接短语6. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于()分析方法。
A. 自左向右B. 自顶向下C. 自底向上D. 自右向左7. 在通常的语法分析方法中,()特别适用于表达式的分析。
A. 算符优先分析法B. LR分析法C. 递归下降分析法D. LL(1)分析法8. 优化可生成_____的目标代码。
A. 运行时间较短B. 占用存储空间较小C. 运行时间短但占用内存空间大D. 运行时间短且占用存储空间小9.()是两类程序语言处理程序。
A. 系统程序和应用程序B.编译程序和操作系统C. 解释程序和编译程序D.高级语言程序和低级语言程序10. 经过编译所得到的目标程序是()。
A. 四元式序列B. 间接三元式序列C. 二元式序列D. 机器语言程序或汇编语言程序11. 程序的基本块是指()。
A. 一个子程序B. 一个仅有一个入口和一个出口的语句C. 一个没有嵌套的程序段D. 一组顺序执行的程序段,仅有一个入口和一个出口12. 一个上下文无关文法G包括四个组成部分:一组终结符,一组非终结符,一个开始符号,以及一组()。
编译原理模拟试题和答案[编译原理模拟试题和答案.d

【题型】简答题1题干】现有文法G[S]:B→idt|ε请问aidtccb是句型还是句子,为什么?S→aAbA→BcA|B【答案】S ⇒aAb ⇒aBcAb ⇒aidtcAb ⇒aidtcBcAb ⇒aidtc εcAb ⇒ aidtccAb⇒aidtccBb ⇒aidtcc εb ⇒ aidtccb是句型,也是句子。
【题型】简答题2题干】设有文法G1[S]:<S>→<N><N>→<D>|<N><D><D→0|1|2|…|9试写出028的最左推导过程。
【答案】028的最左推导:<S>=><N>=><N><D>=><N><D><D>=><D><D><D>=>0<D><D>=>02<D>=>028。
3题型】填空题【题干】递归下降法不允许任一非终结符是直接_______________递归的。
【答案】左;4题型】填空题【题干】在使用高级语言编程时,首先可通过编译程序发现源程序的全部_______________错误和部分语义错误。
【答案】语法;5题型】填空题【题干】把汇编语言程序翻译成机器可执行的目标程序的工作是由_______________完成的。
【答案】汇编器;6题型】填空题【题干】语法分析器的输出是_______________。
【答案】语法单位;循环优化的三种重要技术包括删除归纳变量、代码外提和_______________。
【答案】强度消弱;8题干】写出表达式(a+b)/(a-b)-a(a+b*c)的三元式序列及四元式序列。
【答案】三元式:⑴.(+,a,b) ⑵.(-,a,b) ⑶.(/,⑴,⑵) ⑷.(*,b,c) ⑸.(+,a,⑷) ⑹.(-,⑶,⑸)四元式:⑴.(+,a,b,T1) ⑵.(-,a,b,T2) ⑶.(/,T1,T2,T3) ⑷.(*,b,c,T4) ⑸.(+,a,T4,T5) ⑹.(-,T3,T5,T6)9题干】什么是句子?什么是语言?【答案】(1)设G是一个给定的文法,S是文法的开始符号,如果S→x(其中x∈VT*),则称x是文法的一个句子。
编译文法考试题及答案

编译文法考试题及答案1. 编译文法中,产生式规则的形式是什么?答案:产生式规则的形式为:非终结符→ 产生式体,其中产生式体可以包含终结符和非终结符。
2. 什么是文法的自左向右的推导?答案:自左向右的推导是指从起始符号开始,逐步应用产生式规则,将符号替换为产生式体的过程,直到得到一个只包含终结符的字符串。
3. 在编译原理中,什么是最左推导和最右推导?答案:最左推导是在推导过程中,总是优先选择最左边的非终结符进行替换;最右推导则是总是优先选择最右边的非终结符进行替换。
4. 请解释什么是文法的二义性。
答案:文法的二义性指的是一个字符串可以有两种或以上的不同推导过程,即存在不同的语法树或派生树。
5. 什么是文法的正规化?答案:文法的正规化是指将文法转换为等价的正规文法,正规文法的特点是所有的产生式规则都具有形式A → aB或A → a,其中A和B是非终结符,a是终结符。
6. 在编译文法中,什么是左递归?答案:左递归是指在文法的产生式规则中,非终结符直接或间接地出现在它自己的产生式体的开头位置。
7. 请解释什么是文法的乔姆斯基层级?答案:文法的乔姆斯基层级是根据文法的表达能力来划分的,从0型到3型,0型文法最简单,3型文法最复杂,能够表达自然语言。
8. 在编译原理中,什么是语法分析树?答案:语法分析树是一棵表示输入字符串的推导过程的树,树的根节点是起始符号,叶节点是终结符,内部节点是非终结符。
9. 什么是文法的左因子和右因子?答案:左因子是指在文法中,多个产生式体的开头部分相同;右因子是指在文法中,多个产生式体的结尾部分相同。
10. 在编译原理中,什么是移进-规约分析?答案:移进-规约分析是一种自底向上的语法分析方法,它使用栈来存储输入符号和状态,通过移进和规约操作来分析输入字符串是否符合文法规则。
编译-模拟试卷一

编译原理模拟试卷一一.填空题(每空1分,共20分)1.若一个翻译程序的源程序是用语言编写的,其目标程序是语言或者语言的程序,则称该翻译程序为编译程序。
2.右线性文法的产生式规则限制为。
3.设有文法G: S→AA→B | if A then A else AB→C | B+C | +CC→D | C*D | *DD→x |(A)| -D其中,终结符集V T= ,非终结符集V N= 。
4.词法分析的任务是:依据语言的,分析由字符组成的,把它识别为一个一个具有独立意义的最小语法单位,即“”,并识别出与其相关的属性。
5.词法分析程序在识别标识符时,先识别是否为标识符,然后还要判别标识符是否为。
6.符号表在编译期间两项重要的作用分别是辅助与辅助代码生成。
7.表达式a*b+c*d的逆波兰式为。
8.为了消除左递归,文法A→Ax|y 可变换为。
9.文法G产生的的全体是该文法描述的语言。
10.自下而上语法分析的基本思想是:从左向右扫描输入串,一边,一边检查栈顶是否形成某个产生式的右部――若是,则用相应产生式的左部取代栈顶的那串符号(称为);若不是,则继续重复上述动作,直至栈顶形成文法的时为止。
11.常用的动态存储分配方法有存储分配与存储分配。
12.优化根据所涉及程序的范围,可分为局部优化、和全局优化三种。
二.判断题(正确的在括号中记√,错误的记×,并且说明理由。
每小题2分,共20分)()1.编译程序与解释程序的区别在于编译程序对源程序进行了翻译,而解释程序则没有。
()2.每个句子都有规范推导;每个句型都有规范推导。
()3.若一个语言的句子有无穷多个,则其对应的文法必定是递归的。
()4.一个语言的文法是唯一的。
()5.对于文法G【A】:A →aABe | BaB →dB | ε有人说:因为 FIRST(aABe)∩ FOLLOW(A)=∅FIRST(Ba)∩ FOLLOW(A)≠∅所以,文法G【A】不是LL(l)文法。
编译模拟试题及答案Word版

《编译原理》模拟试题班级学号姓名评分一、填空1.文法G包括四个组成部分:一组终结符号,,一组产生式,以及。
2.文法按产生式的形式分为四种类型,它们是:0型文法,又称短语文法;1型文法,又称上下文有关文法;2型文法,又称文法;3型文法,又称文法。
3.推导称为规范推导,由产生的句型称为规范句型。
4.设G是一个文法,S是它的开始符号,如果 S α,则称α是一个句型。
的句型是一个句子。
5 对于一个文法G而言,如果L(G)中对应,那么该文法就称为是二义的。
6.通常程序设计语言的单词符号分为五种:基本字、、常数、、界限符。
7.在自底向上分析法中,LR分析法把“可归约串”定义为。
8.编译中常用的中间代码形式有逆波兰式、、和四元式等。
9.对中间代码优化按涉及的范围分为局部优化,和。
10.局部优化主要包括合并已知量、和等内容。
二、编译过程通常分为哪几个主要阶段?每个阶段的主要功能?三、设有文法G1 G1:S→SaQ ∣ Q1.证明句型QbRae是规范句型 Q→QbR ∣ R R→cSd ∣ e2.给出句型QbRae 的短语,直接短语和句柄:短语:直接短语:句柄:四、对于文法G2,填写各产生式的选择集合和G2的预测分析表。
G2:① E→TE' SELECT(①)={ }② E'→+TE’ SELECT(②)={ }③ E'→ε SELECT(③)={ }④ T→FT' SELECT(④)={ }⑤ T'→*FT’ SELECT(⑤)={ }⑥ T'→ε SELECT(⑥)={ }⑦ F→(E) SELECT(⑦)={ }⑧ F→ i SELECT(⑧)={ }五、把下面的语句翻译成四元式序列。
(只给出最后结果,设nextstat当前值为100)while A<C do if A<0 then A:=A+1 else A:=A+2六、用基本块代码生成算法生成目标代码。
8套《编译原理》期末模拟试卷+参考答案

3.(10 分)为下面的语言写一个无二义的文法: ML 语言中用分号分隔语句的语句块,例如:
( (s ; s ) ; ( s ; s ; s ) ; s ) ; ( s ; s )
4.(20 分)考虑一个类 Pascal 的语言,其中所有的变量都是整型(不需要显 式声明),并且仅包含赋值语句、读语句、写语句,条件语句和循环语句。下
面的产生式定义了该语言的语法(其中 lit 表示整型常量;OP 的产生式没有给 出,因为它和下面讨论的问题无关)。
定义 Stmt 的两个属性:MayDef 表示它可能定值的变量集合,MayUse 表 示它可能引用的变量集合。
(1)写一个语法制导定义或翻译方案,它计算 Stmt 的 MayDef 和 MayUse 属性。
编译结果报错的主要信息如下: multiple definition of ‘a’
试分析为什么会报这样的错误。
10.(5 分)按照教材上介绍的方法,把下面 C++语言的函数翻译成 C 的函 数。
void zoom (GraphicalObj &obj, double zoom_factor, Point ¢er) {
接受该语言的最简 DFA 是:
b
start
a
1a
编译原理试题及答案

编译原理试题及答案一、单项选择题(每题2分,共20分)1. 编译器的主要功能是将()转换成目标代码。
A. 汇编语言B. 高级语言C. 机器语言D. 伪代码答案:B2. 语法分析阶段的任务是()。
A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:B3. 下列哪个算法是用于构建语法分析树的?()A. LL(1)分析B. LR(1)分析C. 语法制导翻译D. 语法制导翻译方案答案:A4. 在编译原理中,一个文法的产生式A→α表示()。
A. A可以被α替换B. A可以被α推导C. A可以被α翻译D. A可以被α解释答案:B5. 一个语言的语法分析树的根节点对应于()。
A. 程序B. 程序的输入C. 程序的输出D. 程序的语法答案:D6. 编译器的语义分析阶段主要处理()。
A. 词法分析B. 语法分析C. 类型检查D. 代码优化答案:C7. 编译器的代码优化阶段主要进行()。
A. 词法分析B. 语法分析C. 类型检查D. 指令选择答案:D8. 编译器的代码生成阶段主要进行()。
A. 词法分析B. 语法分析C. 类型检查D. 指令序列生成答案:D9. 编译器的哪个阶段负责处理变量的存储分配?()A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:D10. 编译器的哪个阶段负责处理宏展开?()A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:A二、多项选择题(每题3分,共15分)1. 编译器的前端包括()。
A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:ABC2. 编译器的后端包括()。
A. 词法分析B. 语法分析C. 代码优化D. 代码生成答案:CD3. 编译器的语义分析阶段可能包括()。
A. 类型检查B. 作用域解析C. 存储分配D. 代码优化答案:ABC4. 编译器的代码优化阶段可能包括()。
A. 常量折叠B. 死代码消除C. 循环不变代码外提D. 词法分析答案:ABC5. 编译器的代码生成阶段可能包括()。
编译技术考试试题及答案

编译技术考试试题及答案一、填空题(每空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是该文法的一个句型,并指出该句型的所有短语、直接短语和句柄。
编译原理考试题及答案

编译原理考试题及答案一、选择题(每题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. 编译器的运行时系统在内存管理中,需要处理________和垃圾收集。
编译考卷b考卷

编译考卷B一、选择题(每题2分,共20分)A. 词法分析B. 语法分析C. 代码D. 机器学习A. 代码优化B. 代码解释C. 代码转换D. 代码调试A. 上下文无关文法B. 上下文有关文法C. 正则文法D. 自动机文法A. 词法分析B. 语法分析C. 语义分析D. 代码优化A. 词法分析B. 语法分析C. 语义分析D. 代码A. 代码优化B. 目标代码C. 代码解释D. 符号表管理A. 三地址码B. 逆波兰表达式C. 抽象语法树D. 汇编语言A. 常量折叠B. 公共子表达式消除C. 循环展开D. 代码混淆A. 静态类型B. 动态类型C. 强类型D. 弱类型A. GDBB. ValgrindC. MakeD. GCC二、填空题(每题2分,共20分)1. 编译器的主要任务是进行________、________、________和________。
2. 编译过程一般可以划分为________、________、________、________和________五个阶段。
3. 在编译原理中,________是描述程序语言语法结构的一种形式化方法。
4. 编译器前端主要包括________、________和________三个阶段。
5. 编译器后端主要包括________、________和________三个阶段。
6. 在编译过程中,________阶段负责检查源程序中的语法错误。
7. ________是一种中间代码表示形式,它将源程序中的表达式转换成后缀表达式。
8. 编译器优化方法主要包括________、________、________和________等。
9. 程序语言的基本特性包括________、________和________。
10. 常用的编译器调试工具有________、________和________。
三、简答题(每题10分,共30分)1. 简述编译器的基本任务和编译过程。
编译原理习题及答案(整理后)

编译原理习题及答案(整理后)第一章1、将编译程序分成若干个“遍”是为了b.使程序的结构更加清晰2、构造编译程序应掌握a.源程序b.目标语言c.编译方法3、变量应当c.既持有左值又持有右值4、编译程序绝大多数时间花在上。
d.管理表格5、不可能是目标代码。
d.中间代码6、使用可以定义一个程序的意义。
a.语义规则7、词法分析器的输入是b.源程序8、中间代码生成时所遵循的是-c.语义规则9、编译程序是对d.高级语言的翻译10、语法分析应遵循c.构词规则二、多项选择题1、编译程序各阶段的工作都涉及到b.表格管理c.出错处理2、编译程序工作时,通常有阶段。
a.词法分析三、填空题b.语法分析c.中间代码生成e.目标代码生成1、解释程序和编译程序的区别在于是否生成目标程序2、编译过程通常可分为5个阶段,分别是词法分析、语法分析中间代码生成、代码优化和目标代码生成。
3、编译程序工作过程中,第一段输入是源程序,最后阶段的输出为标代码生成程序。
4、编译程序是指将源程序程序翻译成目标语言程序的程序。
一、单项选择题1、文法G:S→某S某|y所识别的语言是a.某y某b.(某y某)某c.某ny某n(n≥0)d.某某y某某2、文法G描述的语言L(G)是指α,α∈VT某}a.L(G)={α|S+某α,α∈V某}b.L(G)={α|ST某α,α∈(V∪V某)}d.L(G)={α|S+α,α∈(V∪V某)}c.L(G)={α|STNTN3、有限状态自动机能识别a.上下文无关文法c.正规文法b.上下文有关文法d.短语文法4、设G为算符优先文法,G的任意终结符对a、b有以下关系成立a.若f(a)>g(b),则a>bc.a~b都不一定成立b.若f(a)5、如果文法G是无二义的,则它的任何句子αa.最左推导和最右推导对应的语法树必定相同b.最左推导和最右推导对应的语法树可能不同c.最左推导和最右推导必定相同d.可能存在两个不同的最左推导,但它们对应的语法树相同6、由文法的开始符经0步或多步推导产生的文法符号序列是a.短语b.句柄c.句型d.句子7、文法G:E→E+T|TT→T某P|PP→(E)|I则句型P+T+i的句柄和最左素短语为a.P+T和ib.P和P+Tc.i和P+T+id.P和T8、设文法为:S→SA|AA→a|b则对句子aba,下面是规范推导。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《编译原理》模拟试题
班级学号姓名评分
一、填空
1.文法G包括四个组成部分:一组终结符号,,一组产生式,以及。
2.文法按产生式的形式分为四种类型,它们是:0型文法,又称短语文法;
1型文法,又称上下文有关文法;2型文法,又称文法;
3型文法,又称文法。
3.推导称为规范推导,由产生的句型称为规范句型。
4.设G是一个文法,S是它的开始符号,如果S α,则称α是一个句型。
的句型是一个句子。
5 对于一个文法G而言,如果L(G)中对
应,那么该文法就称为是二义的。
6.通常程序设计语言的单词符号分为五种:基本字、、常数、、界限符。
7.在自底向上分析法中,LR分析法把“可归约串”定义为。
8.编译中常用的中间代码形式有逆波兰式、、和四元式等。
9.对中间代码优化按涉及的范围分为局部优化,和。
10.局部优化主要包括合并已知量、和等内容。
二、编译过程通常分为哪几个主要阶段?每个阶段的主要功能?
三、设有文法G1G1:S→SaQ ∣Q 1.证明句型QbRae是规范句型Q→QbR ∣R
R→cSd ∣e
2.给出句型QbRae 的短语,直接短语和句柄:
短语:
直接短语:
句柄:
四、对于文法G2,填写各产生式的选择集合和G2的预测分析表。
G2:①E→TE' SELECT(①)={ }
②E'→+TE’ SELECT(②)={ }
③E'→ε SELECT(③)={ }
④ T→FT' SELECT(④)={ }
⑤ T'→*FT’ SELECT(⑤)={ }
⑥ T'→ε SELECT(⑥)={ }
⑦ F→(E) SELECT(⑦)={ }
⑧ F→i SELECT(⑧)={ }
五、把下面的语句翻译成四元式序列。
(只给出最后结果,设nextstat当前值为100)
while A<C do if A<0 then A:=A+1 else A:=A+2 六、用基本块代码生成算法生成目标代码。
(假定允许使用R
1和R
2
寄存器,临时变量T
i
出基本块后都不活跃)
《编译原理》模拟试题
班级学号姓名评分
二、填空
1.文法G包括四个组成部分:一组终结符号,一组非终结符号,一组产生式,以及一个开始符号。
2.文法按产生式的形式分为四种类型,它们是:0型文法,又称短语文法;
1型文法,又称上下文有关文法;2型文法,又称上下文无关文法;3型文法,又称正规文法。
3.最右推导称为规范推导,由规范推导产生的句型称为规范句型。
4.设G是一个文法,S是它的开始符号,如果S=*>α,则称α是一个句型。
仅由终结符号组成的句型是一个句子。
5 对于一个文法G而言,如果L(G)中存在某个句子对应两棵不同的语法树,
那么该文法就称为是二义的。
6.通常程序设计语言的单词符号分为五种:基本字、标识符、常数、算符、
界限符。
7.在自底向上分析法中,LR分析法把“可归约串”定义为句柄。
8.编译中常用的中间代码形式有逆波兰式、三元式、树代码和四元式等。
9.对中间代码优化按涉及的范围分为局部优化,循环优化和全局优化。
10.局部优化主要包括合并已知量、利用公共子表达式和删除无用赋值等内容。
11.为了构造不带回溯的递归下降分析程序,我们通常要消除左递归和提取左公共因子
二、编译过程通常分为哪几个主要阶段?每个阶段的主要功能?(15分)答:编译过程通常分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成六个主要阶段。
各个阶段的主要功能如下:词法分析阶段:读入源程序,对构成源程序的字符流进行扫描和分解,识别出一个个单词,并表示成计算机内部的形式(TOKEN字)。
语法分析阶段:在词法分析的基础上,将单词序列分解成各类语法短语,如“表达式”、“语句”、“程序”等,确定整个输入串是否构成语法上正确的程序。
语义分析阶段:审查源程序有无语义错误,为代码生成阶段收集类型信息。
中间代码生成阶段:将源程序翻译成一种复杂性介于源程序与目标程序之间的内部形式(中间代码)。
代码优化:对前阶段产生的中间代码进行等价变换,目的是使将来生成的目标代码更为高效。
目标代码生成:把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。
三、设有文法G1G1:S→SaQ ∣Q
1.证明句型QbRae是规范句型Q→QbR ∣R
R→cSd ∣e
证:因为句型QbRae可由文法开始符S经过规范推导产生,推导过程如下:S =R> SaQ =R> SaR =R> Sae =R> Qae =R> QbRae
所以句型QbRae是规范句型。
2.给出句型QbRae 的语法树和句柄:
语法树:
句柄:QbR
四、考虑以下文法:
D→T V
T →int | float
V →id ,V | id
a.在该文法中提取左公因子。
b.为所得的文法的非终结符构造First集合和Follow集合。
c.说明所得的文法是LL(1)文法。
d.为所得的文法构造LL(1)分析表
e.假设有输入串
int x,y,z
写出相应的LL(1)分析程序的动作。
答:
a. 文法存在左公因子,提取左公因子后的文法为:
D→T V
T →int | float
V →id V'
V'→ ,V |ε
b.
c. (1)
First ( TV ) = { int , float }
First(int)∩First(float)={int}∩{float}=φ;
First(id V')={id};
First(,V)∩First(ε)={,}∩{ ε}}=φ;
(2)
V'=>ε,
First(V')∩Follow(V')= { , , ε }∩{ $ }=φ
根据LL(1)文法的定义判断,此文法是LL(1)文法;
d. LL(1)分析表为:
e. 输入串int x,y,z的LL(1)分析:
五、考虑以下的文法:
E → ( L ) | a
L → L , E | E
a. 为这个文法构造LR(0)项目的DFA。
b. 判断这个文法是否是LR(0)文法?若不是,请描述出LR(0)冲突,如果是,则构造LR(0)分析表。
c. 判断这个文法是否为SLR(1)文法?若是,构造SLR(1)分析表。
d. 显示分析栈和输入串((a),a,(a,a))的SLR(1)分析程序的工作。
答:拓广文法:
(0) E’→ E
(1) E → ( L )
(2) E → a
(3) L → L , E
(4) L → E
是LR(0)文法, LR(0)分析表为:
是SLR(1)文法,SLR(1)分析表为:
六、把下面的语句翻译成四元式序列。
(只给出最后结果,设LABEL当前值为100)
while A<C do if A<0 then A:=A+1 else A:=A+2 100: j< , A , C , 102
101: j , - , - , 110
102: j< , A , 0 , 104
103: j , - , - , 107
104: + , A , 1 , T1
105: := , T1 , - , A
106: j , - , - , 100
107: + , A , 2 , T2
108: := , T2 , - , A
109: j , - , - , 100
110:
S.NEXT=101
七、设有基本块
T1:=2
T2:=10/T1
T3:=S-R
T4:=S+R
A:=T2 * T4
B:=A
T5:=S+R
T6:=T3 * T5
B:=T6
(1) 画出DAG图;
(2) 假设基本块出口时只有A,B还被引用,请写出优化后的四元序列。
T3:=S-R
T4:=S+R
A:= 5 * T4
B:=T4*T3
八、考虑下面程序
Var a:integer;
Procedure S(X);
Var X:integer;
Begin
a:=a+1;
X:=a+X
End;
Begin
a:=5;
S(a);
Print(a)
End.
试问:若参数传递方式分别采取传名和传值时,程序执行后输出a的值是什么?答:传名:a=12
传值:a=6。