编译原理阶段测试题
- 格式:doc
- 大小:115.50 KB
- 文档页数:10
编译原理试题及答案一、选择题1. 编译器的主要功能是什么?A. 程序设计B. 程序翻译C. 程序调试D. 数据处理答案:B2. 下列哪一项不是编译器的前端处理过程?A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:D3. 在编译原理中,词法分析器的主要作用是什么?A. 识别程序中的关键字和标识符B. 将源代码转换为中间代码C. 检查程序的语法结构D. 确定程序的运行环境答案:A4. 语法分析通常采用哪种方法?A. 自顶向下分析B. 自底向上分析C. 正则表达式匹配D. 直接解释执行答案:B5. 语义分析的主要任务是什么?A. 检查程序的语法结构B. 检查程序的类型安全C. 识别程序中的变量和常量D. 将源代码转换为机器代码答案:B二、简答题1. 简述编译器的工作原理。
答案:编译器的工作原理主要包括以下几个步骤:词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。
词法分析器将源代码分解成一系列的词素;语法分析器根据语法规则检查词素序列是否合法;语义分析器检查程序的语义正确性;中间代码生成器将源代码转换为中间代码;代码优化器对中间代码进行优化;最后,目标代码生成器将优化后的中间代码转换为目标机器代码。
2. 什么是词法分析器,它在编译过程中的作用是什么?答案:词法分析器是编译器前端的一个组成部分,负责将源代码分解成一个个的词素(tokens),如关键字、标识符、常量、运算符等。
它在编译过程中的作用是为语法分析器提供输入,是编译过程的基础。
三、论述题1. 论述编译器中的代码优化技术及其重要性。
答案:代码优化是编译过程中的一个重要环节,它旨在提高程序的执行效率,减少资源消耗。
常见的代码优化技术包括:常量折叠、死代码消除、公共子表达式消除、循环不变代码外提、数组边界检查消除等。
代码优化的重要性在于,它可以显著提高程序的运行速度和性能,同时降低程序对内存和处理器资源的需求。
四、计算题1. 给定一个简单的四则运算表达式,请写出其对应的逆波兰表达式。
编译原理考试题一、选择题。
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.将目标代码转换成中间代码。
二、填空题。
1. 词法分析的输出是()。
2. 语法分析的输出是()。
3. 语义分析的输出是()。
4. 目标代码生成的输入是()。
5. 目标代码生成的输出是()。
三、简答题。
1. 请简要说明编译过程中词法分析的作用和实现方法。
2. 请简要说明编译过程中语法分析的作用和常用的语法分析方法。
3. 请简要说明编译过程中语义分析的作用和常见的语义分析任务。
4. 请简要说明编译过程中目标代码生成的作用和常用的目标代码生成方法。
5. 请简要说明编译过程中优化的作用和常见的优化方法。
四、分析题。
1. 请分析词法分析器的设计和实现方法,并给出一个具体的例子。
2. 请分析语法分析器的设计和实现方法,并给出一个具体的例子。
3. 请分析语义分析器的设计和实现方法,并给出一个具体的例子。
4. 请分析目标代码生成器的设计和实现方法,并给出一个具体的例子。
5. 请分析编译器优化的方法和实现过程,并给出一个具体的例子。
五、综合题。
1. 请设计一个简单的编译器,包括词法分析器、语法分析器、语义分析器和目标代码生成器,并给出相应的实现代码。
2. 请分析该编译器的设计思路和实现方法,并说明其优缺点。
编译原理考试试卷一、选择题(每题2分,共20分)1. 编译器的主要功能是将源代码转换成目标代码,以下哪个不是编译器的基本组成部分?A. 词法分析器B. 语法分析器C. 代码优化器D. 运行时环境2. 词法分析器通常不负责以下哪项任务?A. 识别关键字B. 识别标识符C. 进行语义分析D. 去除空白字符3. 语法分析中,递归下降分析是一种:A. 确定性分析方法B. 非确定性分析方法C. 基于语法制导的分析方法D. 基于语法树的分析方法4. LR分析器是用于处理:A. 上下文无关文法B. 上下文有关文法C. 正则文法D. 链式文法5. 语义分析的目的是:A. 检查源代码的语法是否正确B. 检查源代码的语义是否正确C. 将源代码转换为目标代码D. 优化源代码6. 代码生成阶段,编译器将抽象语法树转换成:A. 目标代码B. 源代码C. 汇编代码D. 机器代码7. 编译优化中,常量折叠是一种:A. 局部优化B. 全局优化C. 过程间优化D. 模块内优化8. 编译器的前端主要负责:A. 源代码的输入B. 目标代码的生成C. 源代码的解析和翻译D. 运行时错误检测9. 编译器的后端主要负责:A. 词法分析B. 语法分析C. 代码优化D. 目标代码的生成和链接10. 以下哪个是编译原理中常用的数据结构?A. 栈B. 队列C. 链表D. 所有选项都是二、简答题(每题10分,共30分)1. 简述编译原理中词法分析器的作用及其实现方式。
2. 描述语法分析中自顶向下分析和自底向上分析的区别。
3. 解释编译优化的重要性,并给出一个优化的例子。
三、计算题(每题25分,共50分)1. 给定一个简单的算术表达式 "3 + 4 * 2 - 1",请说明如何使用递归下降分析器来解析这个表达式,并给出相应的语法树。
2. 假设你有一个简单的编译器后端,需要将四元式 "(a, b, +, c)" 转换成目标代码。
编译原理⾃测(⼀、⼆、三)及答案编译原理⾃测⼀⼀、是⾮题(下列各题,你认为正确的,请在题⼲的括号内打“√”,错的打“×”。
每题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、逆波兰法表⽰的表达式亦称前缀式。
完整word版编译原理考试试题及答案《编译原理》考试试题及答案(附录)一、判断题:1.一个上下文无关文法的开始符,可以是终结符或非终结符。
( X )2.一个句型的直接短语是唯一的。
( X )3.已经证明文法的二义性是可判定的。
( X )4.每个基本块可用一个DAG表示。
(√)5.每个过程的活动记录的体积在编译时可静态确定。
(√)6.2型文法一定是3型文法。
( x )7.一个句型一定句子。
( X )8.算符优先分析法每次都是对句柄进行归约。
(应是最左素短语) ( X )9.采用三元式实现三地址代码时,不利于对中间代码进行优化。
(√)10.编译过程中,语法分析器的任务是分析单词是怎样构成的。
( x )11.一个优先表一定存在相应的优先函数。
( x )12.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
( )13.递归下降分析法是一种自下而上分析法。
( )14.并不是每个文法都能改写成LL(1)文法。
( )15.每个基本块只有一个入口和一个出口。
( )16.一个LL(1)文法一定是无二义的。
( )17.逆波兰法表示的表达试亦称前缀式。
( )18.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
( )19.正规文法产生的语言都可以用上下文无关文法来描述。
( )20.一个优先表一定存在相应的优先函数。
( )21.3型文法一定是2型文法。
( )22.如果一个文法存在某个句子对应两棵不同的语法树,则文法是二义性的。
( )二、填空题:1.( 最右推导 )称为规范推导。
2.编译过程可分为(词法分析),(语法分析),(语义分析和中间代码生成),(代码优化)和(目标代码生成)五个阶段。
3.如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是()。
4.从功能上说,程序语言的语句大体可分为()语句和()语句两大类。
5.语法分析器的输入是(),其输出是()。
6.扫描器的任务是从()中识别出一个个()。
编译原理考试题及答案一、选择题(每题5分,共20分)1. 编译器的主要功能是什么?A. 代码优化B. 代码翻译C. 代码调试D. 代码运行答案:B2. 下列哪个选项不属于编译器的前端部分?A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:D3. 在编译原理中,文法的产生式通常表示为:A. A -> αB. A -> βC. A -> γD. A -> δ答案:A4. 下列哪个算法用于构建语法分析树?A. LL(1)分析B. LR(1)分析C. SLR(1)分析D. LALR(1)分析答案:A二、填空题(每空5分,共20分)1. 编译器的前端通常包括词法分析、语法分析和________。
答案:语义分析2. 编译器的后端主要负责________和目标代码生成。
答案:代码优化3. 编译器中的词法分析器通常使用________算法来识别单词。
答案:有限自动机4. 语法分析中,________分析是一种自顶向下的分析方法。
答案:递归下降三、简答题(每题10分,共30分)1. 简述编译器的作用。
答案:编译器的主要作用是将高级语言编写的源代码转换成计算机能够理解的低级语言或机器代码,以便执行。
2. 解释一下什么是语法制导翻译。
答案:语法制导翻译是一种翻译技术,它利用源语言的语法信息来指导翻译过程,使得翻译过程能够更好地理解源代码的语义。
3. 什么是词法分析器?答案:词法分析器是编译器前端的一部分,它的任务是将源代码文本分解成一系列的标记(tokens),这些标记是源代码的最小有意义的单位。
四、计算题(每题10分,共30分)1. 给定一个简单的文法G(E):E → E + T | TT → T * F | FF → (E) | id请计算文法的非终结符号E的FIRST集和FOLLOW集。
答案:E的FIRST集为{(, id},FOLLOW集为{), +, $}。
2. 假设编译器在进行语法分析时,遇到一个语法错误的代码片段,请简述编译器如何处理这种情况。
参考答案一、单项选择题(共10小题,每小题2分,共20分)1.语言是A .句子的集合B .产生式的集合C .符号串的集合D .句型的集合 2.编译程序前三个阶段完成的工作是 A .词法分析、语法分析和代码优化 B .代码生成、代码优化和词法分析C .词法分析、语法分析、语义分析和中间代码生成D .词法分析、语法分析和代码优化3.一个句型中称为句柄的是该句型的最左 A .非终结符号 B .短语 C .句子 D .直接短语4.下推自动机识别的语言是A .0型语言B .1型语言C .2型语言D .3型语言5.扫描器所完成的任务是从字符串形式的源程序中识别出一个个具有独立含义的最小语法单位即 A . 字符B .单词C .句子D .句型6.对应Chomsky 四种文法的四种语言之间的关系是 A .L 0⊂L 1⊂L 2⊂L 3B .L 3⊂L 2⊂L 1⊂L 0C .L 3=L 2⊂L 1⊂L 0D .L 0⊂L 1⊂L 2=L 3 7.词法分析的任务是 A .识别单词B .分析句子的含义C .识别句子D .生成目标代码 8.常用的中间代码形式不含A .三元式B .四元式C .逆波兰式D .语法树 9. 代码优化的目的是A .节省时间B .节省空间C .节省时间和空间D .把编译程序进行等价交换10.代码生成阶段的主要任务是 A .把高级语言翻译成汇编语言 B .把高级语言翻译成机器语言C .把中间代码变换成依赖具体机器的目标代码装 订 线D.把汇编语言翻译成机器语言二、填空题(本大题共5小题,每小题2分,共10分)1.编译程序首先要识别出源程序中每个(单词),然后再分析每个(句子)并翻译其意义。
2.编译器常用的语法分析方法有(自底向上)和(自顶向下)两种。
3.通常把编译过程分为分析前端与综合后端两大阶段。
词法、语法和语义分析是对源程序的(分析),中间代码生成、代码优化与目标代码的生成则是对源程序的(综合)。
编译原理考试试卷一、选择题(每题2分,共20分)1. 下列哪个选项不是编译器的主要功能?A. 词法分析B. 语法分析C. 语义分析D. 运行程序2. 编译过程中,词法分析器的作用是:A. 将源代码转换为中间代码B. 将源代码分解为一系列的标记C. 检查源代码的语法正确性D. 优化生成的目标代码3. 在编译原理中,自底向上的语法分析方法通常指的是:A. LL(1)分析B. LR(1)分析C. SLR(1)分析D. LALR(1)分析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. 无限制文法9. 编译器在生成目标代码时,通常需要考虑的是:A. 源代码的可读性B. 目标代码的可执行性C. 源代码的语法正确性D. 目标代码的可移植性10. 在编译原理中,下列哪个选项不是中间代码的形式?A. 三地址代码B. 四元组C. 抽象语法树D. 二进制代码二、填空题(每空1分,共10分)1. 编译器在进行语法分析时,通常使用________文法来描述程序设计语言的语法规则。
2. 编译器的________阶段负责将源代码中的标识符替换为内存地址。
3. 在编译原理中,________文法可以用来描述正则表达式。
4. 编译器在进行语义分析时,需要检查变量的________和________。
编译原理练习四一、填空题1.编译过程中,常见的中间语言形式有四元式、三元式、逆波兰表示和树形表示。
2、表达式x+y≤z V a>0Λ(8+z)>3的逆波兰表示为 xy+z≤a0>8z+3>ΛV。
3、在编译程序中安排中间代码生成的目的是便于代码优化和便于目标程序的移植。
4、根据所涉及程序的范围,优化可分为局部优化、循环优化和全局优化三种。
5、编译程序进行数据流分析的目的是为了进行全局优化。
6.局部优化是局限与一个基本块范围内的一种优化。
7.基本块内可进行的优化有:删除公共子表达式、删除无用代码、合并已知常量等。
8.从词法分析器到中间代码生成与被编译的源代码有关,称之为编译器的前端,而目标代码生成主要与目标机有关,称之为编译器的后端。
9.编译器通常按需要把寄存器分为三组使用:可分配寄存器、保留寄存器和零用寄存器。
10.释放寄存器的总的原则是释放代价最小的寄存器。
二、选择题1.表达式-a+b*(-c+d)的逆波兰式是 d 。
a.ab+-cd+-*b.a-b+c-d+*c.a-bc+-d+*d.a-bc-d+*+2.在编译程序中安排中间代码生成的目的是 b d 。
a.便于进行存储空间的组织b.有利于目标代码的优化c.有利于编译程序的移植d.有利于目标代码的移植e.有利于提高目标代码的质量3.-a-(b*c/(c-d)+(-b)*a)的逆波兰表示是 c 。
a.abc*cd-b-a*+/--b.a-bc*cd-b-a*+/-c.a-bc*cd-/b-a*+-d.a-bc*/cd-b-a*+-4.赋值语句X:=-(a+b)/(c-d)-(a+b*c)的逆波兰表示是 c 。
a.Xab+cd-/-bc*a+-:=b. Xab+/cd-bc*a+--:=c. Xab+-cd-/abc*+-:=d. Xab+cd-/abc*+--:=5.对任何一个编译程序来说,产生中间代码是 b .a.不可缺少的b. 不一定必要的6.逆波兰表达式ab+cd+*所代表的中缀形式的表达式是 b 。
第一阶段测试卷考试科目:《编译原理》第1章至第4章(总分100分)时间:90分钟学习中心(教学点)批次:层次:专业:学号:身份证号:姓名:得分:一、选择与填充(30)1. 一个正则语言只能对应( )?A. 一个正则文法B. 一个最小有限状态自动机C. 一个自然语言D. 一个上下文有关文法2. 对于编译程序而言,输入数据是源程序,输出数据是___________________。
3. 给出在字母表{0,1}上的“所有以00结尾的符号串的集合”的语言的正则表达式:_____________________。
4. 一个句型中最左的()称为该句型的句柄。
A. 简单短语B. 短语C. 非终结符号D. 终结符号5. Micro语言只有三种语句:()、输入语句和输出语句。
A. GOTO语句B.赋值语句C. 条件语句D.循环语句6. 描述高级语言语法的常用方法有________________和BNF范式。
二、给出与正规式R=(ab)*(a|b*)ab等价的NFA。
(16)三、简述 DFA 与 NFA 有何区别。
(14)四、判断下列文法是否具有二义性:G[P]: P→PaP|PbP|cP|Pe|f(18)五、对于下面的文法G[Z],构造句子(i*i+i)*i的最左和最右推导及相应的语法树。
(22)(1) Z::=E (2) E::=T+E (3) E::=T (4) T::=F*T(5) T::=F (6) F::=(E) (7) F::=i附:参考答案:一、选择与填充(30)1.一个正则语言只能对应( B )?A. 一个正则文法B. 一个最小有限状态自动机C. 一个自然语言D. 一个上下文有关文法2.对于编译程序而言,输入数据是源程序,输出数据是____目标程序_________。
3. 给出在字母表{0,1}上的“所有以00结尾的符号串的集合”的语言的正则表达式:________(0|1)*00__________。
4. 一个句型中最左的( A )称为该句型的句柄。
A. 简单短语B. 短语C. 非终结符号D. 终结符号5. Micro语言只有三种语句:( B )、输入语句和输出语句。
A.GOTO语句B.赋值语句C.条件语句D.循环语句6. 描述高级语言语法的常用方法有___语法图_____和BNF范式。
二、给出与正规式R=(ab)*(a|b*)ab等价的NFA。
(16)三、简述 DFA 与 NFA 有何区别。
(14)解:DFA与NFA的区别主要有两点:1是NFA可以若干个开始状态,而DFA仅只一个开始状态。
2是DFA的映象M是从K×∑到K,而NFA的映象M是从K×∑到K的子集,即映象M将产生一个状态集合(可能为空集),而不是单个状态。
四、判断下列文法是否具有二义性:G[P]: P→PaP|PbP|cP|Pe|f(18)解:因为文法存在句型fbfbf,此句型有两棵不同的语法树,所以文法具有二义性。
五、对于下面的文法G[Z],构造句子(i*i+i)*i的最左和最右推导及相应的语法树。
(22)(1) Z::=E (2) E::=T+E (3) E::=T (4) T::=F*T(5) T::=F (6) F::=(E) (7) F::=i解:最左:Z=>E=>T=>F*T=>(E)*T=>(T+E)*T=>(F*T+E)*T=>(i*T+E)*T=>(i*F+E)*T=>(i*i+E)*T =>(i*i+T)*T=>(i*i+F)*T=>(i*i+i)*T=>(i*i+i)*F=>(i*i+i)*i最右:Z=>E=>T=>F*T=>F*F=>F*i=>(E)*i=>(T+E)*i=>(T+T)*i=>(T+F)*i=>(T*i)*i=>(F*T+i)*i =>(F*F+i)*i=>(F*i+i)*i=>(i*i+i)*i第二阶段测试卷考试科目:《编译原理》第4章至第7章(总分100分)时间:90分钟学习中心(教学点)批次:层次:专业:学号:身份证号:姓名:得分:一、选择与填充(30)1.有限状态自动机能识别( )。
A. 上下文无关文法B. 上下文有关文法C. 正则文法D. 短语文法2.在语法分析处理中, FIRST集合、 FOLLOW集合、 SELECT集合都是( )。
A. 非终极符集 B.终极符集 C.字母表 D. 状态集3.在自底向上的语法分析方法中,分析的关键是( )。
A. 寻找句柄B. 寻找句型C. 消除递归D. 消除公共前缀4.______________________是这样一种动作文法,即动作符只出现于产生式的末尾。
5.文法要满足两个条件:_____________________和_________________________才可以使用自顶向下的语法分析方法。
6. 文法G[E]: E→E+T|T, T→T*P|P, P→(E)|I, 则句型P+T+i的短语有()。
A. i, P+TB. P, P+T, i, P+T+iC. P+T+iD. P, P+T, i二、若有文法G[S]为:S->Ac|aB A->df B->be,请写出语言L(G[S])的全部元素。
(12)三、文法G[S]为:(18)S→VV→T | ViTT→F| T+FF→)V* |(试给出句型ViFi( 的短语,简单(直接)短语,句柄。
四、写出表达式(a+b*c)/(a+b)-d的逆波兰表示和三元式序列。
(15)五、下面的文法是不是LL(1)文法?若是,请构造相应的LL(1)分析表。
(25)S → aD D → STe | εT → bH | H H → d | ε附:参考答案:一、选择与填充(30)1.有限状态自动机能识别( C )A. 上下文无关文法B. 上下文有关文法C. 正则文法D. 短语文法2.在语法分析处理中, FIRST集合、 FOLLOW集合、 SELECT集合都是( B )。
A. 非终极符集 B.终极符集 C.字母表 D. 状态集3.在自底向上的语法分析方法中,分析的关键是( A )。
A. 寻找句柄B. 寻找句型C. 消除递归D. 消除公共前缀4._______尾动作文法________是这样一种动作文法,即动作符只出现于产生式的末尾。
5.文法要满足两个条件:________没有左递归_____和______没有公共前缀_____才可以使用自顶向下的语法分析方法。
6. 文法G[E]: E→E+T|T, T→T*P|P, P→(E)|I, 则句型P+T+i的短语有( B )。
A. i, P+TB. P, P+T, i, P+T+iC. P+T+iD. P, P+T, i二、若有文法G[S]为:S->Ac|aB A->df B->be,请写出语言L(G[S])的全部元素。
(12)解:因为S=>Ac=>dfcS=>aB=>abe所以L(G[S])={a b c d e f}三、文法G[S]为:(18)S→VV→T | ViTT→F| T+FF→)V* |(试给出句型ViFi( 的短语,简单(直接)短语,句柄。
解: 句型ViFi(的语法树如下:F是句型ViFi(相对于T的短语、简单短语、句柄(是句型ViFi(相对于F的短语、简单短语(是句型ViFi(相对于T的短语ViF是句型ViFi(相对于V的短语ViFi(是句型ViFi(相对于V的短语ViFi(是句型ViFi(相对于S的短语四、写出表达式(a+b*c)/(a+b)-d的逆波兰表示和三元式序列。
(15)解:逆波兰表示:abc*+ab+/d-三元式序列:(1) (*,b,c)(2) (+,a,(1))(3) (+,a,b)(4) (/,(2),(3))(5) (-,(4),d)五、下面的文法是不是LL(1)文法?若是,请构造相应的LL(1)分析表。
(25)S → aD D → STe | εT → bH | H H → d | ε解: Predict(S → aD)=first(aD)={a}Predict(D → STe)=first(STe)={a}Predict(D →ε)=follow(D)={#,b,d,e}Predict(T→ bH)=first(bH)={b}Predict(T→ H)=first(H)∪follow(T)={d,e}Predict(H→ d)=first(d)={d}Pridict(H→ε)=follow(H)={e}第三阶段测试卷考试科目:《编译原理》第8章至第10章(总分100分)时间:90分钟学习中心(教学点)批次:层次:专业:学号:身份证号:姓名:得分:一、选择与填充(30)1. 四元式之间的联系是通过( )来实现的。
A.指示器 B.临时变量 C.符号表 D.程序变量2. 优化可生成( )的目标代码。
A. 运行时间较短B. 运行时间短但占用内存空间大C. 占用存储空间较小D. 运行时间短且占用存储空间小3. 下列( )优化方法不是针对循环优化进行的。
A. 强度削弱 B.删除归纳变量 C.删除多余运算 D.代码外提4. 在目标代码生成阶段,符号表用于( )。
A.目标代码生成 B.语义检查 C.语法检查 D.地址分配5.语法分析是依据语言的__________规则进行的,中间代码产生是依据语言的_________规进行的。
6.优化可分为局部优化、_____________和全局优化三种。
二、写出表达式A*(B/C-D)+E/F的逆波兰中间代码。
(15)三、什么是活动记录?它主要由哪些内容构成?(15)四、试写出算术表达式a+b*c-(c*b+a-e)/(b*c+d)优化后的四元式序列。
(15)五、文法G[M]及其LR分析表如下,请给出对串dada#的分析过程。
(30)G[M]: 1) S →VdB2) V →e3) V →ε 4) B →a5) B →Bda 6) B →ε附:参考答案:一、选择与填充(30)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.语法分析是依据语言的___语法__规则进行的,中间代码产生是依据语言的__语义___规进行的。