编译基础学习知识原理和技术期末专业考试复习资料练习情况总结题
编译原理期末考试试题及答案
编译原理期末考试试题及答案一、选择题(每题2分,共20分)1. 编译器的前端主要负责以下哪项工作?A. 代码优化B. 目标代码生成C. 词法分析和语法分析D. 运行时支持2. 词法分析器的主要任务是什么?A. 识别语法结构B. 识别词法单元C. 构建语法树D. 代码优化3. 语法分析中,使用哪种方法可以避免回溯?A. 递归下降分析B. LR分析C. LL分析D. 自顶向下分析4. 下列哪个选项不是中间代码的形式?A. 三地址代码B. 四元组C. 抽象语法树D. 汇编语言5. 代码优化的目标不包括以下哪项?A. 提高代码执行速度B. 减少程序占用的内存C. 增加程序的可读性D. 减少程序的执行时间二、简答题(每题10分,共30分)1. 简述编译器的主要组成部分及其功能。
2. 解释什么是语法制导翻译,并举例说明其在编译过程中的应用。
3. 描述静态作用域规则和动态作用域规则的区别。
三、计算题(每题15分,共30分)1. 给定一个简单的算术表达式 `3 + (4 * 5) - 2`,请使用逆波兰表示法表示,并说明其转换过程。
2. 假设有一个简单的文法如下:```S -> A BA -> a A | εB -> b B | ε```请写出使用该文法生成字符串 "ab" 的所有派生树。
四、论述题(每题20分,共20分)1. 论述编译器中代码优化的重要性,并举例说明常见的优化技术。
参考答案一、选择题1. C2. B3. B4. D5. C二、简答题1. 编译器的主要组成部分包括前端、中端和后端。
前端负责词法分析和语法分析,中端进行语义分析和中间代码生成,后端则负责代码优化和目标代码生成。
2. 语法制导翻译是一种基于文法规则的翻译技术,它将源程序的语法结构映射到相应的语义操作上。
例如,在编译过程中,语法制导翻译可以用于将源代码中的条件语句转换为中间代码中的跳转指令。
3. 静态作用域规则是指变量的作用域在编译时确定,而动态作用域规则是指变量的作用域在运行时确定。
编译原理期末复习题
编译原理期末复习题(包含上一份N多答案)(总28页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--编译原理复习题一、填空题: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个输入符号)。
《编译原理》期末复习资料(完整版)
1.给出语言{a n b n a m b m | n,m≥0}的一个上下文无关文法。
(6分)解:G[S]:S—>ABA—>aAb |εB—>aBb |ε2.给出语言{1 n 0 m 1 m0 n | n,m≥0}的一个上下文无关文法。
解:G[S]:S—>1S0 | AA—>0A1 |ε3.P48 第6题(5)、(6).画语法树6、已知文法G:<表达式>::=<项>|<表达式>+<项><项>::=<因子>|<项>*<因子><因子>::=(<表达式>)|i(5)i+(i+i) (6)i+i*i解:(5)语法树:(6)语法树:4.P48第13题直接短语等13、一个上下文无关文法生成句子abbaa的推导树如下:(3)求直接短语解:直接短语有:a ε bP102例题6.1及其分析.( 后加画语法树)例6.1 设文法G[S]为:(1)S—>aAcBe(2)A—>b(3)A—>Ab(4)B—>d对输入串abbcde#进行分析,检查该符号串是否是G[S]的句子。
步骤符号栈输入符号串动作(1)# abbcde# 移进(2)#a bbcde# 移进(3)#ab bcde# 归约(A—>b)(4)#aA bcde#移进(5)#aAb cde# 归约(A—>Ab)(6)#aA cde# 移进(7)#aAc de# 移进(8)#aAcd e# 归约(B—>d)(9)#aAcB e# 移进(10)#aAcBe # 归约(S—>aAcBe)(11)#S # 接受一、计算分析题(60%)1、正规式→ NFA→ DFA→最简DFAP72第1题(1)、(4);第一题1、构造下列正规式相应的DFA.(1)1(0|1)*101解:先构造NFA0 1S AA A ABAB AC ABAC A ABZABZ AC AB除S,A外,重新命名其他状态,令AB为B、AC为C、ABZ为D,因为D含有Z(NFA的终态),所以0 1S AA A BB C BC A DD C B(4) b((ab)*|bb)*ab解:先构造NFA得到DFA如下所示:P72第4题(a)4、把下图确定化和最小化解:确定化:a b0 01 101 01 11 0、{1},其中A为初态,A,B为终态,因此有:a bA B CB B CC A最小化::初始分划得终态组{A,B},非终态组{C}Π0:{A,B},{C},对终态组进行审查,判断A和B是等价的,故这是最后的划分。
编译原理第三版期末复习
期末复习总结《编译原理》第一章:绪论一、填空问题①由于计算机只能认识机器语言,所以需要翻译程序将高级语言翻译成计算机可以识别的机器语言。
②编译程序的工作过程一般主要划分为词法分析,语法分析,中间代码生成,代码优化,目标代码生成等几个基本阶段,同时还会伴有表格管理和出错处理。
③如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两个阶段:编译阶段和运行阶段。
如果编译程序生成的目标程序是汇编语言的程序,则源程序的执行分为三个阶段:编译阶段,汇编阶段和运行阶段。
1-02.若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序 ,则其翻译程序称为编译程序.1-03.编译方式与解释方式的根本区别在于是否生成目标代码 .1-05.对编译程序而言,输入数据是源程序,输出结果是目标程序 .1-10.一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括(1)c.其中, (2)b 和代码优化部分不是每个编译程序都必需的. 词法分析器用于识别 (3)c ,语法分析器则可以发现源程序中的 (4)d .(1) a.模拟执行器 b.解释器 c.表格处理和出错处理 d.符号执行器(2) a.语法分析 b.中间代码生成 c.词法分析 d.目标代码生成(3) a.字符串 b.语句 c.单词 d.标识符(4) a.语义错误 b.语法和语义错误 c.错误并校正 d.语法错误1-11.程序语言的语言处理程序是一种 (1)a . (2)b 是两类程序语言处理程序,他们的主要区别在于 (3)d .(1) a.系统软件 b.应用软件 c.实时系统 d.分布式系统(2) a.高级语言程序和低级语言程序 b.解释程序和编译程序c.编译程序和操作系统d.系统程序和应用程序(3) a.单用户与多用户的差别 b.对用户程序的查错能力c.机器执行效率d.是否生成目标代码1-12.汇编程序是将 a 翻译成 b ,编译程序是将 c 翻译成 d .a.汇编语言程序b.机器语言程序c.高级语言程序d. a 或者 be. a 或者 cf. b 或者 c1-13.下面关于解释程序的描述正确的是 b .(1) 解释程序的特点是处理程序时不产生目标代码(2) 解释程序适用于COBOL 和 FORTRAN 语言(3) 解释程序是为打开编译程序技术的僵局而开发的a. (1)(2)b. (1)c. (1)(2)(3)d.(2)(3)1-14.高级语言的语言处理程序分为解释程序和编译程序两种.编译程序有五个阶段,而解释程序通常缺少 (1)e 和 (1)b .其中, (1)e 的目的是使最后阶段产生的目标代码更为高效.与编译系统相比,解释系统 (2)d .解释程序处理语言时,大多数采用的是 (3)b 方法.(1): a. 中间代码生成 b.目标代码生成 c.词法分析 d.语法分析 e.代码优化(2): a.比较简单,可移植性好,执行速度快b.比较复杂,可移植性好,执行速度快c.比较简单,可移植性差,执行速度慢d.比较简单,可移植性好,执行速度慢(3): a.源程序命令被逐个直接解释执行 b.先将源程序转化为之间代码,再解释执行c.先将源程序解释转化为目标程序,在执行d.以上方法都可以1-15.用高级语言编写的程序经编译后产生的程序叫 b .用不同语言编写的程序产生 a 后,可用 g 连接在一起生成机器可执行的程序.在机器中真正执行的是 e .a. 源程序b. 目标程序c. 函数d. 过程e. 机器指令代码f. 模块g. 连接程序h.程序库1-16.要在某一台机器上为某种语言构造一个编译程序,必须掌握下述三方面的内容: c , d , f .a. 汇编语言b. 高级语言c. 源语言d. 目标语言e. 程序设计方法f. 编译方法g. 测试方法h. 机器语言1-17.由于受到具体机器主存容量的限制,编译程序几个不同阶段的工作往往被组合成(1)d ,诸阶段的工作往往是 (2)d 进行的.(1) a. 过程 b. 程序 c. 批量 d.遍(2) a. 顺序 b. 并行 c. 成批 d.穿插1-18.编译程序与具体的机器 a , 与具体的语言 a .a. 有关b.无关1-19.使用解释程序时,在程序未执行完的情况下, a 重新执行已执行过的部分.a. 也能b.不可能1-20.编译过程中,语法分析器的任务就是 b .(1) 分析单词是怎样构成的(2)分析单词串是如何构成语句和说明的(3) 分析语句和说明是如何构成程序的 (4) 分析程序的结构a. (2)(3)b. (2)(3)(4)c. (1)(2)(3)d.(1)(2)(3)(4)1-21.编译程序是一种常用的 b 软件.a. 应用b. 系统1-22.编写一个计算机高级语言的源程序后,到正式上机运行之前,一般要经过 b 这几步.(1) 编辑 (2) 编译 (3) 连接 (4) 运行a. (1)(2)(3)(4)b. (1)(2)(3)c. (1)(3)d.(1)(4)1-23.编译程序必须完成的工作有 a .(1) 词法分析 (2) 语法分析 (3) 语义分析(4) 代码生成 (5) 之间代码生成 (6) 代码优化a. (1)(2)(3)(4)b. (1)(2)(3)(4)(5)c. (1)(2)(3)(4)(5)(6)d. (1)(2)(3)(4)(6)e. (1)(2)(3)(5)(6)1-24.“用高级语言书写的源程序都必须通过编译,产生目标代码后才能投入运行”这种说法a .a. 不正确b.正确1-25.把汇编语言程序翻译成机器可执行的目标程序的工作是由 b 完成的.a. 编译器b. 汇编器c. 解释器d. 预处理器1-26.编译程序生成的目标程序 b 是机器语言的程序.a. 一定b. 不一定1-27.编译程序生成的目标程序 b 是可执行的程序.a. 一定b. 不一定1-28.编译程序是一种 B 。
(完整word版)编译原理期末复习题(含答案)(word文档良心出品)
第八节习题一、单项选择题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.等价变换规则9、编译程序是对。
a.汇编程序的翻译b.高级语言程序的解释执行c.机器语言的执行d.高级语言的翻译10、语法分析应遵循。
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、编译程序各阶段的工作都涉及到。
a.语法分析b.表格管理c.出错处理d.语义分析e.词法分析2、编译程序工作时,通常有阶段。
a.词法分析b.语法分析c.中间代码生成d.语义检查e.目标代码生成解答1.b、c 2. a、b、c、e三、填空题1、解释程序和编译程序的区别在于。
编译原理期末总结复习
编译原理期末总结复习(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如公文写作、报告体会、演讲致辞、党团资料、合同协议、条据文书、诗词歌赋、教学资料、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!In addition, this shop provides you with various types of classic sample essays, such as official document writing, report experience, speeches, party and group materials, contracts and agreements, articles and documents, poems and songs, teaching materials, essay collections, other sample essays, etc. Learn about the different formats and writing styles of sample essays, so stay tuned!编译原理期末总结复习编译原理期末总结复习(精选3篇)编译原理期末总结复习篇1一、简答题1.什么是编译程序?答:编译程序是一种将高级语言程序(源程序)翻译成低级语言(目标程序)的程序。
编译原理试题汇总 编译原理期末试题(8套含答案 大题集)
编译原理考试题及答案汇总一、选择1.将编译程序分成若干个“遍”是为了_B__。
A . 提高程序的执行效率B.使程序的结构更加清晰C. 利用有限的机器内存并提高机器的执行效率D.利用有限的机器内存但降低了机器的执行效率2.正规式 MI 和 M2 等价是指__C__。
A . MI 和 M2 的状态数相等 B.Ml 和 M2 的有向弧条数相等。
C .M1 和 M2 所识别的语言集相等 D. Ml 和 M2 状态数和有向弧条数相等3.中间代码生成时所依据的是 _C_。
A.语法规则 B.词法规则 C.语义规则 D.等价变换规则4.后缀式 ab+cd+/可用表达式__B_来表示。
A. a+b/c+d B.(a+b)/(c+d) C. a+b/(c+d) D. a+b+c/d6.一个编译程序中,不仅包含词法分析,_A____,中间代码生成,代码优化,目标代码生成等五个部分。
A.( ) 语法分析 B.( )文法分析 C.( )语言分析 D.( )解释分析7.词法分析器用于识别__C___。
A.( ) 字符串 B.( )语句 C.( )单词 D.( )标识符8.语法分析器则可以发现源程序中的___D__。
A.( ) 语义错误 B.( ) 语法和语义错误C.( ) 错误并校正 D.( ) 语法错误9.下面关于解释程序的描述正确的是__B___。
(1) 解释程序的特点是处理程序时不产生目标代码(2) 解释程序适用于 COBOL 和 FORTRAN 语言(3) 解释程序是为打开编译程序技术的僵局而开发的A.( ) (1)(2) B.( ) (1) C.( ) (1)(2)(3) D.( ) (2)(3)10.解释程序处理语言时 , 大多数采用的是__B___方法。
A.( ) 源程序命令被逐个直接解释执行B.( ) 先将源程序转化为中间代码 , 再解释执行C.( ) 先将源程序解释转化为目标程序 , 再执行D.( ) 以上方法都可以11.编译过程中 , 语法分析器的任务就是__B___。
大工19秋《编译原理基础》期末考试复习题
机密★启用前大连理工大学网络教育学院2019年秋《编译原理基础》期末考试复习题☆注意事项:本复习题满分共:200分。
一、单项选择题1、以010结尾的二进制串的正规式为()。
A.(1|0)*01 B.0*01*C.(1|0)*010 D.0(1|0)*012、与(s|t)* (s|t)等价的正规式是()。
A.s*| t* B.(st)*(s|t)C.(s|t)(s|t)* D.(s|t)*3、对正规式(a*|b*)+所描述的语言,下列说法准确的是()。
A.连续个a再加连续个b所组成的串的集合B.a和b个数相等的串的集合C.a和b组成的所有串(不含空串)的集合D.a和b组成的所有串(包含空串)的集合4、对于DFA模型,说法错误的是()。
A.DFA从任何状态出发,对于任何输入符号,可有多个转换B.任何状态都没有ε转换C.DFA有唯一的开始状态D.DFA可以有多个接受状态5、以下说法错误的是()。
A. NFA的状态集合是无限的B. NFA的输入符号可能有多个C. DFA的状态集合是有限的D. DFA的输入符号可能有多个6、符号串ab1b2是文法G[A]:A→aB B→bB|b的句子,该句子的句柄是()。
A.b1B.b2C.a D.b1b27、移进-归约分析为输入串构造分析树是从()开始的。
A.根结点B.叶结点C.中间结点D.任一结点8、下列叙述正确的是()。
A.任何LL(1)文法都是LR(1)文法B.任何LL(1)文法都是SLR(1)文法C.任何SLR(1)文法肯定是LR(1)文法D.任何LR(1)文法肯定是LALR(1)文法9、下列叙述正确的是()。
A.S属性定义属于L属性定义B.变量类型声明的语法制导定义不是一个L属性定义C.L属性定义只包含综合属性D.L属性定义只包含继承属性10、中间代码生成时所依据的为()。
A.语法规则B.语法规则C.语义规则D.等价变换规则单选题答案1. C 2. B 3. D 4. A 5. A6. B 7. B 8. C 9. A 10.C二、填空题1、对编译程序而言,输入数据是,输出结果是。
编译原理期末总结
编译原理期末总结编译原理是计算机科学中的一门重要课程,它涵盖了从程序的源代码到可执行代码的整个过程。
在本学期的学习中,我通过理论学习和实践项目的方式,深入了解了编译原理的重要概念和实践技术,对编译器的原理和设计有了更深入的了解。
在本文中,我将对编译原理的重要内容进行总结并分享我的学习收获。
一、编译原理的基础知识在学习编译原理之前,我们需要了解计算机的基础知识和概念,例如计算机的组成原理、计算机体系结构和计算机操作系统等。
这些基础知识对我们理解编译原理起到了重要的辅助作用。
1. 计算机的组成原理计算机由硬件和软件两部分组成,硬件指的是计算机的物理部分,包括CPU、内存、硬盘等。
而软件指的是运行在计算机上的程序。
2. 计算机体系结构计算机体系结构是计算机硬件和软件之间的接口,包括指令集体系结构和系统结构。
指令集体系结构定义了计算机的机器语言和指令集编码规范,系统结构定义了计算机的组成和连接方式。
3. 计算机操作系统计算机操作系统是一个管理和控制计算机硬件资源的软件,它提供了基本的功能,如进程管理、内存管理和文件管理。
二、编译原理的基本概念编译原理是关于将高级语言编写的程序转化为机器语言的过程,它包括了词法分析、语法分析、语义分析、中间代码生成和代码优化等阶段。
1. 词法分析词法分析是将源代码中的字符流转化为词法单元流的过程。
在词法分析阶段,编译器会识别出关键字、标识符、常量等词法单元,并对它们进行标记和分类。
2. 语法分析语法分析是将词法单元流转化为语法树的过程。
在语法分析阶段,编译器会检查源代码是否符合语法规则,并将它们组织成一个由语法规则决定了语法结构的树状结构。
3. 语义分析语义分析是对语法树进行语义检查和语义修正的过程。
在语义分析阶段,编译器会检查类型一致性、变量声明和作用域等语义规则,并生成符号表来存储变量和函数的信息。
4. 中间代码生成中间代码生成是将源代码转换为一种中间表示形式的过程。
编译原理期末总复习题(含答案)
第八节习题一、单项选择题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、编译程序是一种( )。
A.汇编程序B.目标程序C.翻译程序D.解释程序正确答案:C2、若文法G定义的语言是无限集,则文法必然是( )。
A.二义性的B.上下文无关的C.递归的D.无二义性的正确答案:C3、一个上下文无关文法G包括四个组成部分,它们是一组非终结符号,一组终结符号,一个开始符号,以及一组( )。
A.句子B.单词C.产生式D.句型正确答案:C4、文法G:S →x xS | y 所识别的语言是( )。
A.xxy∗B. xx∗yxC.(xxy)∗D.(xx)∗y正确答案:D5、文法G:S →xS | y 所识别的语言是( )。
A.(xy)∗B.xy∗C.x∗yD. xx∗yx正确答案:C6、在自上而下的语法分析中,应从( )开始分析。
A.句型B.句子C.文法开始符号D.句柄正确答案:C7、语法分析器的输入是()。
A.符号表B.目标程序C.源程序D.Token序列正确答案:D8、LL(1)分析法中“1”的含义是在输入串中查看一个输入符号,其目的是()。
A.确定最左推导B.确定是否推导C.确定句柄D.确定使用哪一个产生式进行展开正确答案:D9、同正规式(a|b)∗等价的正规式为( )。
A.a∗|b∗B.(a|b)+C.(ab)∗D.(a∗|b∗)+正确答案:D10、已知文法G[S]:S→A1,A→A1|S0|0,与G等价的正规式是( )。
A.1∗|0∗1B.0(1|10)∗1C.0(0|1)∗D.1(10|01)∗0正确答案:B11、与(a|b)∗(a|b)等价的正规式是( )。
A.a∗|b∗B.(ab)∗(a|b)C.(a|b)(a|b)∗D.(a|b)∗正确答案:C12、如果一个正规式所代表的集合是无穷的,则它必含有的运算是( )。
A.接运算“·”B.或运算“|”C.括号“(”和“)”D.闭包运算“* ”正确答案:D13、在语法分析处理中,FIRST集合、FOLLOW集合均是( )。
编译原理期末复习
编译原理期末复习鉴于编译原理马上就要期末考试,我将手中集中的一些资料上的题目进行了整理归类,每种类型题目给出了所涉及到的基本知识,然后对每类题目中的第一道例题进行了做法进行了讲解,剩下的例题请给大家作为练习,答案也都给出,希望对大家复习有所帮助,最后由于时间很紧,整理的有些仓促,整理中难免有遗漏或错误,请大家见谅;注:下面出现的字母中,若无特别说明,小写英文字母为终结符,大写英文字母为非终结符,希腊字母为终结符与非终结符的任意组合;1、简答题或者名词解释下面涉及到的概念中,加下划线的都是在以往一些试卷中出现的原题,务必掌握;注:这类题目老师说答案不会超过一百个字,否则写的再多也不给分,有些点到即可,不要重复啰嗦;1简述编译程序的概念及其构成答:1编译程序:它特指把某种高级程序设计语言翻译成等价的低级程序设计语言的翻译程序;2构成:2简述词法分析阶段的主要任务也有可能问语法分析阶段主要任务答:词法分析的任务是输入源程序,对源程序进行扫描,识别其中的单词符号,把字符串形式的源程序转换成单词符号形式的源程序;语法分析的主要任务是对输入的单词符号进行语法分析根据语法规则进行推导或者归约,识别各类语法单位,判断输入是不是语法上正确的程序3 简述编译程序的构造过程这个大家看看,是对1和2的综合答:1构造词法分析器:用于输入源程序进行词法分析,输出单词符号;2构造语法分析器:对输入的单词符号进行语法分析,识别各类语法单位,判断输入是不是语法上正确的程序3构造语义分析和中间代码产生器:按照语义规则对已归约出的语法单位进行语义分析并把它们翻译成中间代码;4构造优化器:对中间代码进行优化;5 构造目标代码生成器:把中间的代码翻译成目标程序;6 构造表格管理程序:登记源程序的各类信息和编译各阶段的进展情况;7构造错误处理程序:对出错进行处理;4 说明编译和解释的区别:1编译要程序产生目标程序,解释程序是边解释边执行,不产生目标程序; 2编译程序运行效率高而解释程序便于人机对话;5 文法:描述语言语法结构的形式规则,一般用一个四元式表示: G=VT ,VN,S,P,其中VT :终结符集合非空 VN:非终结符集合非空,且VTVN= S:文法的开始符号,SVNP:产生式集合有限;6二义性文法:一个文法中存某个句子,它有两个不同的最左或者最右推导,则称该文法是二义性的;例子如文法G :S →if expr then S |otherS →if expr then S else S 句子if e1 then if e2 then s1else s2是二义性的;7文法的形式注:文法的形式一定要牢记,特别是2型和3型文法一定要牢记,不仅在概念题中有用,在下面的根据语言写文法题中也有重要作用,如果所写的文法形式不对,一切都是无用功……10型文法短语文法,图灵机:产生式形式为: ,其中: V T V N 且至少含有一个非终结符; V T V N21型上下文有关文法,线性界限自动机:产生式形式为: 其中:|| ||,仅 S 例外但是S 不得出现在任何产生式右部;32型文法上下文无关文法,非确定下推自动机:产生式形式为:P, PV N , V T V N ; 43型文法正规文法,有限自动机:右线性文法:产生式形如:A B 或 A 其中: V T ;A,BV N 左线性文法:产生式形如:A B 或 A 其中: V T ;A,BV N例题:设G=V T ,V N ,S,P 是一个上下文无关文法,产生集合P 中的任一个产生式应具有什么样的形式若G 是1型文法呢若G 是正则文法呢 上下文无关文法, 产生式形式为:P, PV N , V T V N ; 1型文法:产生式形式为: 其中:|| ||,仅 S 例外;正则文法:右线性文法:产生式形如:A B 或 A 其中: V T ;A,BV N左线性文法:产生式形如:A B 或 A 其中: V T ;A,BV N 8什么是PDA 下推自动机答:PDA 是下推自动机,PDA M 用一个七元组表示K,Σ,f,H,h0,S,Z K: 有穷状态集 :输入字母表有穷 H:下推栈符号的有穷字母表h0 :H中的初始符号f: K Σ{} H –> K H S:属于K是初始状态;Z:包含于K,是终结状态集合;9 什么是DFA有穷状态自动机, F,其中:自动机M是一个五元式M=S, , f, S1S: 有穷状态集, 2 :输入字母表有穷,3 f: 状态转换函数,为SS的单值部分映射,fs,a=s’表示:当现行状态为s,输入字符为a时,将状态转换到下一状态s’;我们把s’称为s的一个后继状态;S是唯一的一个初态; 5 FS :终态集可空;4 S10推导:所谓推导就是对于一个含非终结符A的符号串,利用规则A→α,把A替换成α得到新符号串的过程;最左推导:在推导的每一步,选择符号串最左边的非终结符进行替换;最右推导:在推导的每一步,选择符号串最右边的非终结符进行替换;11归约:归约是推倒的逆过程,即用产生式的左部非终结符替换右部符号串;12什么是句型什么称为句子什么是语言句型:从文法的起始符号出发,经过有限步的推导能够推导出来的符号称为句子;句子:只由终结符构成的句型称为句子;语言:所有句子的集合构成该文法描述的语言;13什么是短语什么是直接短语也称为简单短语什么是句柄什么是素短语什么是最左素短语以下几个概念一定要理解,考试中肯定会考哪些是短语,直接短语,句柄等,具体方法请参见后面的短语:如果存在某个文法非终结符P,满足S*⇒βPγ,并且P+⇒α则称α为句型βαγ相对于非终结符P的短语;直接短语:如果Pα,即从P出发一步推出α,则α称为直接短语;句柄:一个句型的最左直接短语称为该句型的句柄;素短语:至少含有一个终结符的短语,并且除了自身外,不包含更小的素短语;最左素短语:句型中最左边的素短语;14自顶向下的语法分析方法中需要解决的主要问题什么如何表示答:1主要需要解决回溯和左递归问题;2表示方式,回溯:文法中存在形如A→α1|α2|…|αn,即产生式右部存在多个候选,导致推导时不能确定到底应该选择哪个候选式;左递归:文法中存在形如P→Pα的形式,推导时会导致推导过程无休止的进行下去;注:解决方法,对回溯采取的是提取左公因子,对左递归使消除左递归包括直接左递归和间接左递归;15内情向量:一般编译程序对数组说明的处理是把数组的有关信息汇集在一个叫做“内情向量”或“信息向量”的表格中,以便以后计算数组元素的地址时引用这些信息;每个数组有一个内情向量;其中的信息包括,数组的类型,维数,各维的上、下界,以及数组的首地址;(16) C语言的活动记录:SP TOP2、最左最右推导,画语法树,找短语、直接短语、句柄等;这种题目很简单,送分题,一定不能丢分考题:1文法GS为:S→SdT | T T→T<G | G G→S | a试给出句型SdG<a的推导过程及语法树,并找出SdG<a的短语,直接简单短语、句柄和最左素短语;分析:1推导和画语法树这些都很简单,不再赘述;2根据所画出的语法树,可以很快的找出短语,直接短语,句柄和最左素短语等,先讲一个简单子树的概念,所谓简单子树是指仅具有单层分支的子树;具体方法如下:短语:任一子树的树叶全体具有共同祖先的叶节点符号串皆为短语;直接短语:任一简单子树的树叶全体具有共同父亲的叶节点符号串皆为简单短语;句柄:最左边的直接短语;素短语:至少含有一个终结符的短语,并且除了自身外,不包含更小的素短语;最左素短语:最左边的素短语;答:1S T T<G G<G S<GSdT<G SdG<GSdG<a语法树:2短语:G,SdG, SdG, a, SdG<a 直接短语:G,a 句柄:G 最左素短:a 注:还有一份试卷将句型改为adT<S,与这个类似,大家自己做做,答案是短语:a,S,T<S,adT<S 直接短语:a,S 句柄:a 最左素短语:SdG下面两道例题大家看看,一定要会找短语,直接短语,句柄等.考题:2文法GE的产生式为E→E+T|T T→TF|F F→i|E①对于句型i+ii,给出最左最右推导及相应的推导树②列出句型的所有短语、简单短语;还有一份试卷上是出句型F+TF的所有短语、简单短语和句柄,大家自己做做答:1最左推导:E TTFFFEFE+TFT+TFF+TFi+TFi+FFi+iFi+ii最右推导ETTFTiFiEiE+TiE+FiE+iiT+iiF+iii+ii推导树如下:2短语;i,i+i,i+i,i+ii 直接短语:i 句柄:i3、根据语言推文法这类题目首先要看清题目,指定的是什么文法,一般都是2型上下无关文法或者3型正规文法,这两类文法形式一定要记住,具体请参见第2页的文法分类;掌握几个基本形式{a n| n>0}对应文法S→aS| a 如果是n>=0则为S→a S|εε是空字{a n b n | n>0}对应文法S→aSb| ab下面这四道题目老是在试卷中重复出现,所以大家好好看看;考题这是书P36 第11题的答案如下:大家作为练习,可以发现比上述题目简单的多了;或者 G4:4、词法分析———正规式、NFA 和DFA 之间的转化:1这类题目一般是三者之间的转换,正规式→NFA →确定化的DFA→最小化的DFA,有时已经给出NFA 了,则只需要确定化为DFA 和最小化就行了,一般每一步都是五分;具体怎么转换请参照我期中考试时整理的提纲,主要就是下面这幅关系对照图,因时间和篇幅限制不再追溯; 2注意优先级关系,闭包运算最高,连接运算.次之,或运算|最低; 3考题1:1构造正则式ab|abb 对应的DFA;15分 ①画出NFA ②确定化DFAG1: S →ACG2: S →ABG3: S →AB A →aAb|εG4:S →1S0|A注:C和E是终态③最小化DFA首先将集合分为{A,B,D,F,G},{C,E};{A,B,D,G}都有a,b作为条件输出,F只有b输出,所以分为{A,B,D,G}和{F} 同理{C,E}分为{C},{E};{A,B,D}a ={B,D} {G}a={F}所以{A,B,D,G}分为{A,B,D}和{G};{A}b ={C} {B,D}a={D}所以分为{A} {B,D}综上所述:划分的结果为{A},{B,D},{C},{E},{G}.考题2:将NFA确定化为DFA10分NFA:含有Y的状态子集为DFA的终态,题目中要求是确定化,{F},{D},{E}然后再画出最小化后的考题3:构造奇数个0和奇数个1组成的自动机;10分状态1:偶数个0 偶数个1 状态2:奇数个0偶数个1状态3:奇数个0 奇数个1 状态4:偶数个0奇数个1如果题目改成偶数个0,奇数个1,只要将状态4转换成终态即可,其他类似;5、语法分析——自顶向下分析法LL1分析法和递归向下构造子程序法注:自顶向下分析法本质是由开始符号,按照产生式逐步推导看能否产生需要分析的句子;1自顶向下分析中存在的问题左递归和回溯具体请参见简答题中的第14题 2消除回溯——提取公因子法提取公共左因子:假定关于A 的规则 A→ 1 | 2 | …| n | 1 | 2 | … | m 其中,每个 不以开头 那么,可以把这些规则改写成A→A | 1 | 2 | … | mA→ 1 | 2 | … | n3消除左递归1消除直接左递归:直接消除见诸于产生式中的左递归:假定关于非终结符P 的规则为P→P | ,其中不以P 开头; 我们可以把P 的规则等价地改写为如下的非直接左递归形式:P→P P→P|注:一般而言,假定P 关于的全部产生式是P→P 1 | P 2 | … | P m | 1 | 2|…|n 其中,每个都不等于,每个都不以P 开头 那么,消除P 的直接左递归性就是把这些规则改写成: P→1P | 2P | … | n P P→1P | 2P |… | m P | 例:文法GE:E→E +T | T T→TF | F F→E | i 经消去直接左递归后变成:E→TE E→+TE | T→FT T →FT | F→E | i2消除间接左递归这个请参见我期中整理的提纲篇幅较多,这里不再重复赘述,请参照下面的考题2;考题1:将文法GS改写为等价的G’S,使得G’S不含左递归和左公因子;S→A A→B|AS B→aB|a答:消除左递归和左公因子后的文法为:S→A A→ BA’A’ → S A’| B→aB’B’ →B|考题2:写出文法GA: A→Ba|Cb|c B→dA|Ae|f C→Bg|h消除左递归后的文法;答:1经分析发现文法GA并无直接左递归;2消除间接左递归:将A,B,C按照B,C,A排序建议将A放在最后由于出现C →Bg形式,将B代入C得:C→dAg|Aeg|fg|h又由于A出现A→Ba A→Cb将B,C带入A得到:A→dAa|Aea|fa|dAgb|Aegb|fgb|hb|c等价于A→Aea|Aegb |dAa|fa|dAgb |fgb|hb|c将A消除直接左递归A→dAaA’|fa A’|dAgb A’ |fgb A’|hb A’|c A’A’→ea A’| egb A’|此时,对于B→dA|Ae|f,C→dAg|Aeg|fg|h由于未在任何产生式的右部出现,所以是多余的;综上所述:消除递归后的文法为:A→dAaA’|fa A’|dAgb A’ |fgb A’|hb A’|c A’A’→ea A’| egb A’|4LL1分析法1含义:LL1分析方法也叫预测分析法:是指从左到右扫描、最左推导LL和只查看一个当前符号括号中的 1;2判断一个文法是否是LL1文法的充要条件:1. 文法不含左递归,2. 对于文法中每一个非终结符A的各个产生式的候选首符集两两不相交;即,若A→ 1| 2|…| n则FIRST i∩FIRST j=ij3. 对文法中的每个非终结符A,若它存在某个候选首符集包含,则FIRSTi∩FOLLOWA= i=1,2,...,n如果一个文法G满足以上条件,则称该文法G为LL1文法;5LL1文法分析表的构造与运用这类题目,主要就是判断文法是否满足LL1文法的三个充要条件,分为以下几步:1首先将文法分解,判断是否有左递归好,有的话肯定不是LL1文法;2算非终结符的First集合和Follow集合,具体方法请参见期中考试的提纲,其实最本质的要抓住first集合是U*a…,Follow集合石…Ua…即可;3算Select集合,书上没有提到Select集合,计算Select集合实质就是计算First,当然考试时不一定非要写成Select集合形式,可以直接计算First来判断交集是否为空,从而是否为LL1文法,请看考题1;4至于判断一个句子的分析过程,大家注意一下,所给的句子不一定是能通过该文法分析出来的,实际上在分析之前可以自己根据文法推推看,请看考题1.5分析表中没有填的空格代表出错,如果分析时遇到了代表该句子不符合该文法; 考题1:判断下面文法是否为LL1文法,若是,请构造相应的LL1分析表并分析句子aabe的分析过程;15分S→aD D→STe|εT→bM M→bH H→M|ε分析:判断一个文法是否为LL1文法是否为LL1文法,主要就是判断是否满足LL1文法的充要条件,有一个不满足就不是LL1文法;对于aabe根据文法SaDaSTeaaDTeaaTeaabMe由于M不能为空字ε,所以最后肯定推不出来,也就是该句子不能由该文法推出,出错;当然一般题目都是LL1文法,否则题目就不好往下做,没有意义;答:1经分析该文法无左递归;2①非终结符的First和Follow集合如下表所示②将文法分解为:S→aD D→Ste D→ε T→bM M→bH H→M H→ε依次计算:FirstaD={a} FirstSte={a}FollowD={ b} FirstbM={b}FirstbH={b} FirstM={b} FollowH={ e }∵FirstSte∩FollowD=ФFirstM∩FollowH=Ф∴该文法是LL1文法LL1分析表如下:3aabe的分析过程如下:考题2:判断下面文法是不是LL1文法,若是请构造相应的LL1分析表,写出aaabd 的分析过程;S→aH H→aMd|d M→Ab|A→aM|e答:1可以判断该文法无左递归;2将文法分解为分解:S→aH H→aMd H→d M→Ab M→A→aM A→e 求First和Follow集合求Select集合SelectS→aH=FirstaH={a} SelectH→aMd=FirstaMd={a}SelectH→d={d} SelectM→Ab=FirstAb={a,e}SelectM→=FirstUFollowM= FollowM={d,b}Select A→aM=First{aM}={a} Select A→e=Firste={e}∵SelectH→aMd ∩SelectH→d= ФSelectM→Ab ∩SelectM→e=ФSelectA→aM ∩SelectA→e= Ф∴该文法是LL1文法;3LL1分析表如下:aaabd的分析过程如下:考题3:构造LL1分析方法的总控流程图6、构造递归下降识别程序这类题目首先看文法有无左递归和左公因子,有的话一定要消除,我期中给大家的答案错了,考题1为更正后的答案;考题1:为文法GE:E → V | V+E V → N | NE N → i构造递归下降识别程序10分解:1提取左公因子:E→VE’E’ →+E|V →NV’V’→E|N → i(3)构造递归下降识别程序PROCEDURE E;BEGINV; E’END; PROCEDURE E’;IF SYM=‘+’ THENBEGINADVANCE;EENDPROCEDURE V;BEGINEND;PROCEDURE F;IF SYM=‘’ THEN BEGINADVANCE; E;IF SYM=‘’PROCEDURE N;IF SYM=‘i’ THENADVANCEELSE ERROR;THENADVANCEELSE ERRORENDELSE ERROR;考题2:为文法GE:E→E+T|T T→TF|F F→E|i构造递归下降识别程序解:1消除左递归:E→TE E→+TE | T→FT T→FT | F→E | i 2构造递归下降识别程序PROCEDURE E;BEGINT;E END;PROCEDURE T;BEGINF;TENDPROCEDURE F;IF SYM=‘i’ THENADVANCEELSEIF SYM=‘’ THENBEGINADVANCE;E;IFSYM=‘’ THENADVANCEELSE ERRORENDELSE ERROR;PROCEDURE E;IF SYM=‘+’ THENBEGINADVANCE; T;EEND PROCEDURE T;IF SYM=‘’ THENBEGINADVANCE; F;TEND7、自底向上分析法——LR0分析法注:自底向上分析法本质是从输入串开始,逐步进行“归约”,直到文法的开始符号,其关键问题是寻找句柄;自底向上分析法还有算符优先分析法,SLR1,LR1等等,老师那天重点讲了一道LR0分析法的题目,他说算符优先分析法A卷不考,但是补考的B卷会考,按照他的意思,这次期末考试LR0是考定的了,SLR1,LR1应该不考,因为LR0分析法个人感觉也是所有题目中最繁的了,下面已老师讲的题目为例这,也是一份试卷上的考题,首先介绍一些相关知识;(1)LR0项目:通俗点讲,文法G中的任何一个产生式的右部的任何位置添加一个圆点就成了LR0项目,比如A→Ab是产生式,则A→Ab A→Ab A→Ab都是该产生式对应的全部项目;项目动态的表示归约的一个阶段:对于项目A→A b,可以这样理解它:“”之前的A表示的是在识别Ab过程中已输入到栈终的部分;“”之后的表示在识别Ab过程中期望出现的部分;“”表示则是在识别Ab过程中当前的识别进度的定位;项目A→Ab 已经具备了识别Ab的一切条件,因此被称为归约项目;项目可以分为以下四类:P→αaβ称为移进项目其中, P→αXβ称为待约项目,其中X为非终结符,P→α称为归约项目,S’→S称为接收项目2LR0的分析栈可以看成两部分状态栈LR分析器的核心是一张分析表:ACTIONs,a:当状态s面临输入符号a时,应采取什么动作.GOTOs,X:状态s面对文法符号X时,下一状态是什么. 下面几张PPT大家看看,对基本概念有个印象:这一章的概念较多较抽象,我一时半会也讲不完讲不清楚,这里不再赘述,直接看题目,知道怎么做就行,下面以一道考题这也是老师讲的原题为例讲解如何做这类题目,首先一般这种题目分三步走:1拓广文法:假定文法G是一个以S为开始符号的文法,我们构造一个G,它包含了整个G,但它引进了一个不出现在G中的非终结符S,并加进一个新产生式S→S,而这个S是G的开始符号;那么,我们称G是G的拓广文法;这样,便会有一个仅含项目S→S.的状态,这就是唯一的“接受”态;2构造识别文法活前缀的DFA:对于任意的项目即I,其闭包CLOSUREI计算方法如下,I中的所有项目都属于CLOSUREI;如果P→αXβ,并且X为非终结符,则所有形如X→γ的项目也属于ClOSUREI定义函数GOI,X,其中I是项目集,X是任意的文法符号终结符,非终结符都可以,GOI,X=CLOSUREJ.J是从I中项目出发后读取X后到达的后继项目,即J={P→αXβ| P→αXβ∈I}有了上述CLOSURE和GO的定以后,从CLOSURE{S→S}出发,利用GO函数,产生出它在每个可能的文法符号下,要转移的项目集,再对新产生的项目集采取同样的方法直到没有新产生的项目集未被处理为止;(4) 根据计算出的项目集之间的关系画出DFA 和LR0分析表,其中LR0构造方法如下:(5) 对具体的句子运用LR0分析的方法如下: 每一项ACTIONs,a 所规定的四种动作:1. 移进 把s,a 的下一状态s’和输入符号a 推进栈,下一输入符号变成现行输入符号.2. 归约 指用某产生式A →β进行归约. 假若β的长度为r, 归约动作是, 去除栈顶r 个项,使状态s m-r 变成栈顶状态,然后把s m-r, A 的下一状态s’=GOTOs m-r, A 和文法符号A 推进栈.3. 接受即acc 宣布分析成功,停止分析器工作.4. 报错 考题:构造文法GE 的LR0分析表,并给出accd 的分析过程; 0S→E1E →aA 2E →bB 3A →cA 4 A →d 5B →cB 6B →d分析:题中已经进行了推广文法,所以第一步就不需要了,下面就是开始构造识别活前缀的DFA,然后构造出LR0分析表,最后在进行分析,实际上对于accd 我们自己可以先推一下,EaAacAaccAaccd 所以该句子符合文法,那么最终构造出的LR0分析表对该句子进行分析后必定得到“acc ”接受的意思,否则构造的LR0分析表出错; 答:1构造识别活前缀的DFA:I 0=Closure{S→E }={ S→E , E→aA, E→bB } I1=GOI0,E=Closure{S→E }={ S→E }I 2=GOI 0,a=Closure{ E→aA }={ E→aA ,A→cA ,A→d } I 3=GOI 0,b=Closure{ E→bB }={E →bB, B→cB ,B→d }为了方便,下面计算中的Closure 不再写了,直接给出答案,考试时可以不写,当然计算I 0是必须要的I 4=GOI 2,A={ E→aA} I 5=GOI 2,c={ A→cA ,A→cA ,A→d } I 6= GOI 2,d={ A→d} I 7=GOI 3,B ={ E→bB}I 8= GOI 3,c= { B→cB ,B→cB ,B→d } I 9= GOI 3,d={ B→d} I 10= GOI 5,A ={ A→cA } GOI 5,c=I 5 GO=I 6 I 11= GOI 8,B { B→cB } GOI 8,c=I 8 GO=I 9 画出DFA:注:实际上构造LR0分析表时这个图没有必要画,根据上述计算结果即可填写下表; 2画出LR0分析表注:至于怎么填这个表请参见上一页中的PPT,这里不再赘述,Action 表中si 代表跳转到第i 个状态,ri 代表选择文法中第i 条规则进行归约,acc 代表接受,即分析成功;Goto 表中数字i 代表跳转到第i 个状态; (3)对accd 进行分析逆波兰式和四元式是三地址代码的两种记录表现形式,当然表示形式还有三元式、间接三元式等等,根据老师的意思应该不考,四元式和逆波兰式必考;1逆波兰表达式逆波兰表达式即后缀表达式,就是中缀表达式也就是我们一般看到的表达式形式对应的后续遍历结果,这个方法有很多,个人认为搞清楚运算优先级,观察一下就可写出,先算谁就将其对应的操作数写出,运算符放在后面就行很简单:例如:写出下列各式的逆波兰表示1 -a-bc/c-d + -ba2 -A+BC↑ D/E/F解: 1 abccd-/ba+ - 2 ABCDE/↑F/+注:代表负号“-”2四元式四元式形式如下op,arg1,arg2,Result从左至右分别代表运算符,第一操作数,第二操作数,运算结果;如:A + B C - D + E / C - D ^N 对应的四元式序列如下:四元式 : 1 - ,C ,D,T1 2 ,B,T1,T23 + ,A,T2,T34 - ,C,D,T45 ^ ,T4,N,T56 / ,E ,T5,T67 + ,T3 ,T6 ,T7注:T1,T2等等位存放结果的临时变量;条件语句等四元式的表示jnz , a ,-- , p 表示 if a goto pjrop, x , y, p 表示 if x rop y goto prop代表关系运算符,如<,>等等j , --, --- , p 表示 goto p例如:写出条件语句 IF a>0 THEN x:=x+1 ELSE x:=4 x- 1 四元式序列解:1 j > , a ,0 ,32 j , -, -,63+,x , 1 , T14 := , T1,-, T25j ,-, -,96 -, x,1, T37 , 4 ,T3 ,T48 := , T4 ,-,x9注意:5和9不能写丢,否则一分没有上述四元式中第二第三个位置的“-”代表没有元素;其实四元式就是对上述程序进行解释,如果满足则跳转到哪里执行,不满足则跳转到哪里执行,大家自己分析一下,应该能够看懂;考题:根据要求写出下列表达式的中间形式;15+6a+b写出表达式的逆波兰式逆波兰表达式为:56ab++2注意:同上题,本题答案加红色的部分此外上述编号随意,从0开始也行从100开始也行;不能丢,否则一分没有9、参数传递这种题目很简单,是送分题,一定要做对参数传递方式分为三种,值传递,地址传递和传名;值传递过程中形参值的改变不会影响实参值的改变,地址传递形参值的改变导致对应是实参值的改变,传名传递类似于C语言中的宏展开,将实参原封不动的替换相应的形参文字替换;请看下题:(1)高级语言程序中常用的参数传递方式有哪些请根据这些传递方式写出程序的运行结果;static int a=1;int pint x,int y,int z {y=y+1;z=z+x;cout<<"In P "<<a<<endl; } int main{int a=2;int b=3;pa,a,a;cout<<"In main "<<a<<endl; return 0;}分析:函数p中输出地a的值是全局变量a的值,与主函数中的局部变量a无关,不要被迷惑住,所以p中输出的a就是1.传值时,由于实参值不受影响,所以a仍为2;传地址时,在函数P中,将实参代入后a=a+1得a=3;再由a=a+a得到a=6;传名时,直接将实参带入形参,原来程序被替换为:a=a+1;a=a+a;将a=2代入得到结果为6.答:①C语言中函数传递的方式有1传值 2传地址 3传名②运行结果:1传值方式:In P 1In main 2 2传地址:In P 1In main 63传名: In P 1In main 62Procedure p x,y,z ; beginy:=y+1;z:=z+x;end; {p} begina:=2;b:=3;pa+b , a , a print a end.传值传递时输出结果为: 2 实参值不受影响,a=2传地址传递时输出结果为:8 a=2+1=3;a=3+5=8传名传递时输出结果为:9 a=a+1;a=a+a+b;得到a=2+1=3;a=3+3+3=910、程序分块、画DAG图这个也比较简单,具体方法如下:(1)分块就是将程序分成一块块的,主要就是确定每一块的入口语句:1寻找入口语句的方法:满足以下条件之一的都是入口语句a程序的第一条语句;b条件转移语句或无条件转移语句可以转移到的语句c紧跟在条件转移语句后面的语句2对每一入口语句,构造其所属的基本块;它是由该语句到下一入口语句不包括下一入口语句,或到一转移语句包括该转移语句,或到一停语句包括该停语句之间的语句序列组成的;3凡未被纳入某一基本块的语句,都是程序中控制流程无法到达的语句,因而也是不会被执行到的语句,我们可以把它们删除;根据基本块画DAG图上述图中的DAG只给出了最后完整的结果,老师要求在考试中需要把每一步都体现出来,具体请参见书上284页,因为篇幅限制所以不再赘述;另外,根据老师的意思可能会将DAG和四元式结合在一起考,给一段程序,先写出其四元式然后在画出其DAG图,四元式与DAG对应关系如下:根据下面的对应关系,DAG图很容易画出来;。
华东理工大学编译原理与技术(本)期末复习题及参考答案
编译原理与技术(本)2022062023模拟试卷一、简答题(共7题,35分)1、一个典型的编译程序通常由哪些部分组成?(5.0)正确答案:一个典型的编译程序通常包含8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。
2、根据下列EBNF写出语法描述图。
<复合语句>::= BEGIN<语句>{;<语句>}END(5.0)正确答案:3、设有文法G[E]:E :: = T | E + T | E–TT :: = F | T * F | T / FF :: = i | ( E )求句型(F+i)–T*(E –T)的短语、简单短语和句柄。
(5.0)正确答案:短语:F相对T、Ei相对F、TF+i相对E(F+i)相对F、T、EE-T相对E(E-T)相对FT*(E-T)相对T(F+i)-T*(E-T)相对E简单短语:F、i、E-T句柄:F4、已知文法 G[Z]:Z→aZb|ab写出 L(G[Z])的全部元素。
(5.0)正确答案:L(G[Z])={anbn|n>=1}5、构造下列正规式相应的DFA b((ab)*|bb)*ab(5.0)正确答案:6、已知文法G[Z]为:Z→bMbM→(L|aL→Ma)给出句子b(aa)b#的分析过程。
(5.0)正确答案:7、设文法G[S]:S→aBc |bABA→aAb|bB→b|ε构造相应的LL(1)分析表。
(5.0)正确答案:。
编译原理期末考试题汇总
编译原理期末考试题汇总一、名词解释:(2.5*4分,所有答案均写在答题纸上)1、句子2、编译程序3、翻译程序4、简单优先文法5、算符优先文法6、文法7、句柄8、语言二义性9、最右推导 10、素短语11、文法的二义性 12、规范推导 13、汇编程序 14、规范规约 15、算符文法16、语言二、试写出下述语言的上下文无关文法(5*2分)1、L1={ab n ab n-1|n≥1}2、试给出不以0打头和结尾的正偶数集合的上下文无关文法.3、L1={wcw R|wє(0|a)*, w R是W的反置},例如W=a000, w R=000a4、L(G)={a2m b m│m≥1}5、不以0打头的偶正整数集合6、L2=写一个文法使其语言为奇数集,且每个奇数不以0开头。
7、L1={ a n b m c| n≥0,m>0 }三、填空(1*12分)1、编译程序的开发常常采用自展,自编译,移植,交叉编译技术。
2、编译过程划分为词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成六个阶段。
3、多数程序设计语言的词法都能用正规文法来描述,而语法则用上下文无关文法来描述。
4、编译程序各阶段的工作都涉及到表格管理,出错处理。
5、高级语言的语言处理程序分为编译程序和解释程序两种。
编译程序有六个阶段,而解释程序通常缺少目标代码生成和代码优化。
与编译系统相比,解释系统执行速度慢,占用内存多。
6、LL(1)分析法中,第一个L的含义是从左到右进行分析,第二个L的含义是每次进行最左推导,“1”的含义是向输入串中查看1个输入符号。
7、已知文法G(S):S→A0|B1,A→S1|1,B→S0|0,则由此文法产生的只含有四个符号的句子是 0101 , 1010 , 0110 , 1001 ,该文法是Chomsky的 3 型文法。
8、编译过程划分为词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成六个阶段,同时还伴有表格管理,出错处理两个过程。
编译原理复习题及参考标准答案教学文案
编译原理复习题及参考标准答案教学⽂案编译原理复习题及参考标准答案《编译原理》课程复习资料⼀、判断题:1.⼀个上下⽂⽆关⽂法的开始符,可以是终结符或⾮终结符。
[ ]2.⼀个句型的直接短语是唯⼀的。
[ ]3.已经证明⽂法的⼆义性是可判定的。
[ ]4.每个基本块可⽤⼀个DAG表⽰。
[ ]5.每个过程的活动记录的体积在编译时可静态确定。
[ ]6.2型⽂法⼀定是3 型⽂法。
[ ]7.⼀个句型⼀定句⼦。
[ ]8.算符优先分析法每次都是对句柄进⾏归约。
[ ]9.采⽤三元式实现三地址代码时,不利于对中间代码进⾏优化。
[ ]10.编译过程中,语法分析器的任务是分析单词是怎样构成的。
[ ]11.⼀个优先表⼀定存在相应的优先函数。
[ ]12.⽬标代码⽣成时,应考虑如何充分利⽤计算机的寄存器的问题。
[ ]13.递归下降分析法是⼀种⾃下⽽上分析法。
[ ]14.并不是每个⽂法都能改写成 LL(1)⽂法。
[ ]15.每个基本块只有⼀个⼊⼝和⼀个出⼝。
[ ]17.逆波兰法表⽰的表达试亦称前缀式。
[ ]18.⽬标代码⽣成时,应考虑如何充分利⽤计算机的寄存器的问题。
[ ]19.正规⽂法产⽣的语⾔都可以⽤上下⽂⽆关⽂法来描述。
[ ]20.⼀个优先表⼀定存在相应的优先函数。
[ ]21.3型⽂法⼀定是2 型⽂法。
[ ]22.如果⼀个⽂法存在某个句⼦对应两棵不同的语法树,则⽂法是⼆义性的。
[ ]⼆、填空题:1. 称为规范推导。
2.编译过程可分为,,,和五个阶段。
3.如果⼀个⽂法存在某个句⼦对应两棵不同的语法树,则称这个⽂法是。
4.从功能上说,程序语⾔的语句⼤体可分为语句和语句两⼤类。
5.语法分析器的输⼊是,其输出是。
6.扫描器的任务是从中识别出⼀个个。
7.符号表中的信息栏中登记了每个名字的有关的性质,如等等。
8.⼀个过程相应的DISPLAY表的内容为。
9.⼀个句型的最左直接短语称为句型的。
10.常⽤的两种动态存贮分配办法是动态分配和动态分配。
编译基础学习知识原理期末试题(含规范标准答案大题集重要学习知识重点)
《编译原理》期末试题(一)一、是非题(请在括号内,正确的划√,错误的划×)(每个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.构造编译程序应掌握______。
编译原理和技术期末考试复习题
2.1 考虑文法G[S],其产生式如下:S→(L)|a L→L,S|S(1)试指出此文法的终结符号、非终结符号。
终结符号为:{(,),a,,,}非终结符号为:{S,L}开始符号为:S(2)给出下列各句子的分析树:① (a,a)②(a,(a,a))③ (a,((a,a),(a,a)))(3)构造下列各句子的一个最左推导:① (a,a)S (L) (L,S) (S,S) (a,S) (a,a)② (a,(a,a))S (L) (L,S) (S,S) (a,S) (a,(L) (a,(L,S))(a,(S,S)) (a,(a,S)) (a,(a,a))③ (a,((a,a),(a,a)))S (L) (L,S) (S,S) (a,S) (a,(L)) (a,(L,S)) (a,(S,S)) (a,((L),S)) (a,((L,S),S)) (a,((S,S),S))(a,((a,S),S)) (a,((a,a),S)) (a,((a,a),(L)))(a,((a,a),(L,S))) (a,((a,a),(S,S))) (a,((a,a),(a,S)))(a,((a,a),(a,a)))(4)构造下列各句子的一个最右推导:①(a,a)S (L) (L,S) (L,a) (S,a) (a,a)②(a,(a,a))S (L) (L,S) (L,(L)) (L,(L,S)) (L,(L,a))(L,(S,a)) (L,(a,a)) (S,(a,a)) (a,(a,a)③(a,((a,a),(a,a))S (L) (L,S) (L,(L)) (L,(L,S)) (L,(L,(L)))(L,(L,(L,S))) (L,(L,(L,a))) (L,(L,(S,a)))(L,(L,(a,a))) (L,(S,(a,a))) (L,((L),(a,a)))(L,((L,S),(a,a))) (L,((L,a),(a,a))) (L,((S,a),(a,a)))(L,((a,a),(a,a))) (S,((a,a),(a,a))) (a,((a,a),(a,a)))(5)这个文法生成的语言是什么?L(G[S]) = (α1,α2,...,αn)或a其中αi(1≤i≤n),即L(G[S])是一个以a为原子的纯表,但不包括空表。
编译原理与技术练习题汇总
练习11.1 为什么高级程序语言需要编译程序?1.2 解释下列术语:源程序,目标程序,翻译程序,编译程序,解释程序1.3 简单叙述编译程序的主要工作过程。
1.4 编译程序的典型体系结构包括哪些构件,主要关系如何,请用辅助图示意。
1.5 编译程序的开发有哪些途径?了解你熟悉的高级编程语言编译程序的开发方式。
1.6 运用编译技术的软件开发和维护工具有许多类,简单叙述每一类的主要用途。
1.7 了解一个真实编译系统的组成和基本功能。
1.8 简单说明学习编译程序的意义和作用。
1.9 如果机器H上有两个编译:一个把语言A翻译成语言B,另一个把B翻译成C,那么可以把第一个编译的输出作为第二个编译的输入,结果在同一类机器上得到从A到C的编译。
请用T形图示意过程和结果。
练习22.1 词法分析器的主要任务是什么?2.2 下列各种语言的输入字母表是什么?(1) C(2) Pascal(3) Java(4) C#2.3 可以把词法分析器写成一个独立运行的程序,也可以把它写成一个子程序,请比较各自的优劣。
2.4 用高级语言编写一个对C#或Java程序的预处理程序,它的作用是每次调用时都把下一个完整的句子送到扫描缓冲区,去掉注释和无用的空格、制表符、回车、换行。
2.5 用高级语言实现图2.5所示的Pascal语言数的状态转换图。
2.6 用高级语言编程实现图2.6所示的小语言的词法扫描器。
2.7 用自然语言描述下列正规式所表示的语言:(1) 0(0|1)*0(2) ((ε|0)1)*)*(3) (a|b)*a(a|b|ε)(4) (A|B|...|Z)(a|b|...|z)*(5) (aa|b)*(a|bb)*(6) (0|1|...|9|A|B|C|D|E)+(t|T)2.8 为下列语言写正规式(1) 所有以小写字母a开头和结尾的串。
(2) 所有以小写字母a开头或者结尾(或同时满足这两个条件)的串。
(3) 所有表示偶数的串。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.1 考虑文法G[S],其产生式如下:S→(L)|a L→L,S|S(1)试指出此文法的终结符号、非终结符号。
终结符号为:{(,),a,,,}非终结符号为:{S,L}开始符号为:S(2)给出下列各句子的分析树:① (a,a)②(a,(a,a))③ (a,((a,a),(a,a)))(3)构造下列各句子的一个最左推导:① (a,a)S (L) (L,S) (S,S) (a,S) (a,a)② (a,(a,a))S (L) (L,S) (S,S) (a,S) (a,(L) (a,(L,S))(a,(S,S)) (a,(a,S)) (a,(a,a))③ (a,((a,a),(a,a)))S (L) (L,S) (S,S) (a,S) (a,(L)) (a,(L,S)) (a,(S,S)) (a,((L),S)) (a,((L,S),S)) (a,((S,S),S))(a,((a,S),S)) (a,((a,a),S)) (a,((a,a),(L)))(a,((a,a),(L,S))) (a,((a,a),(S,S))) (a,((a,a),(a,S)))(a,((a,a),(a,a)))(4)构造下列各句子的一个最右推导:①(a,a)S (L) (L,S) (L,a) (S,a) (a,a)②(a,(a,a))S (L) (L,S) (L,(L)) (L,(L,S)) (L,(L,a))(L,(S,a)) (L,(a,a)) (S,(a,a)) (a,(a,a)③(a,((a,a),(a,a))S (L) (L,S) (L,(L)) (L,(L,S)) (L,(L,(L)))(L,(L,(L,S))) (L,(L,(L,a))) (L,(L,(S,a)))(L,(L,(a,a))) (L,(S,(a,a))) (L,((L),(a,a)))(L,((L,S),(a,a))) (L,((L,a),(a,a))) (L,((S,a),(a,a)))(L,((a,a),(a,a))) (S,((a,a),(a,a))) (a,((a,a),(a,a)))(5)这个文法生成的语言是什么?L(G[S]) = (α1,α2,...,αn)或a其中αi(1≤i≤n),即L(G[S])是一个以a为原子的纯表,但不包括空表。
2.2 考虑文法G[S] S→aSbS|bSaS|ε(1)试说明此文法是二义性的。
可以从对于句子abab有两个不同的最左推导来说明。
S aSbS abS abaSbS ababS ababS aSbS abSaSbS abaSbS ababS abab所以此文法是二义性的。
(2)对于句子abab构造两个不同的最右推导。
S aSbS aSbaSbS aSbaSb aSbab ababS aSbS aSb abSaSb abSab abab(3)对于句子abab构造两棵不同的分析树。
(一) (二)(4)此文法所产生的语言是什么?此文法产生的语言是:所有a的个数与b的个数相等的由a和b组成的字符串。
2.4 已知文法G[S]的产生式如下:S → (L)|a L → L,S|S属于L(G[S])的句子是 A ,(a,a)是L(G[S])的句子,这个句子的最左推导是 B ,最右推导是 C ,分析树是 D ,句柄是 E 。
A:① a ② a,a ③ (L) ④ (L,a)B,C:① S (L) (L,S) (L,a) (S,a) (a,a)② S (L) (L,S) (S,S) (S,a) (a,a)③S (L) (L,S) (S,S) (a,S) (a,a)D:E:① (a,a) ② a,a ③ (a) ④ a解答: A:① B:③ C:① D:② E:④3.1有限状态自动机可用五元组(V T,Q,δ,q0,Q f)来描述,设有一有限状态自动机M的定义如下:V T={0,1},Q={q0,q1,q2},Q f={q2},δ的定义为:δ(q0,0)=q1δ(q1,0)=q2δ(q2,1)=q2δ(q2,0)=q2M是一个 A 有限状态自动机,它所对应的状态转换图为 B ,它所能接受的语言可以用正则表达式表示为 C 。
其含义为 D 。
A: ①歧义的②非歧义的③确定的④非确定的B:C:①(0|1)*②00(0|1)*③(0|1)*00 ④0(0|1)*0D:①由0和1所组成的符号串的集合;②以0为头符号和尾符号、由0和1所组成的符号串的集合;③以两个0结束的,由0和1所组成的符号串的集合;④以两个0开始的,由0和1所组成的符号串的集合。
答案 A:③ B:② C:② D:④3.2 (1)有穷自动机接受的语言是正则语言。
()(2)若r1和r2是Σ上的正规式,则r1|r2也是。
()(3)设M是一个NFA,并且L(M)={x,y,z},则M的状态数至少为4个。
(4)令Σ={a,b},则Σ上所有以b为首的字构成的正规集的正规式为b*(a|b)*。
(5)对任何一个NFA M,都存在一个DFA M',使得L(M')=L(M)。
()(6)对一个右线性文法G,必存在一个左线性文法G',使得L(G)=L(G'),反之亦然。
()答案 (1) T (2) T (3) F (4) F (5) T3.3描述下列各正规表达式所表示的语言。
(1) 0(0|1)*0(2) ((ε|0)1*)*(3) (0|1)*0(0|1)(0|1)(4) 0*10*10*10*(5) (00|11)*((01|10)(00|11)*(01|10)(00|11)*)*答案 (1) 以0开头并且以0结尾的,由0和1组成的所有符号串(2) {α|α∈{0,1}*}即由0和1组成的所有符号串。
(3) 由0和1组成的符号串,且从右边开始数第3位为0。
(4) 含3个1的由0和1组成的所有符号串。
{α|α∈{0,1}+,且α中含有3个1 }(5) {α|α∈{0,1}*,α中含0和1的数目为偶数。
}4.10 已知文法G[S],其产生式如下:S→(L)|a L→L,S|S文法G[S]的算符优先关系由下表给出。
建立与下表相应的算符优先函数并用算符优先分析法分析句子(a,(a,a))。
文法G[S]的算符优先关系表:解:对每个终结符或$建立符号f与g,把f(和g)分成一组。
根据G[S]的算符优先关系表,画出如下的有向图:优先函数如下:用算符优先分析法分析句子(a,(a,a))4.19 (1) 存在有左递归规则的文法是LL(1)的。
(2) 任何算符优先文法的句型中不会有两个相邻的非终结符号。
(3) 算符优先文法中任何两个相邻的终结符号之间至少满足三种关系(<·,·>,)之一。
(4) 任何LL(1)文法都是无二义性的。
(5) 每一个SLR(1)文法也都是LR(1)文法。
(6) 存在一种算法,能判定任何上下文无关文法是否是LL(1)的。
(7) 任何一个LL(1)文法都是一个LR(1)文法,反之亦然。
(8)' LR(1)'括号中的1是指,在选用产生式A→α进行分析,看当前读入符号是否在FIRST(α)中。
答案:(1)×(2)√(3)×(4)√(5)√(6)√(7)×(8)×4.20 在编译程序中,语法分析分为自顶向下分析和自底向上分析两类。
__A__和LL(1)分析法属于自顶向下分析;__B__和LR分析法属于自底向上分析。
自顶向下分析试图为输入符号串构造一个__C__;自底向上分析试图为输入符号串构造一个__D__。
采用自顶向下分析方法时,要求文法中不含有__E__。
A、B:①深度分析法②宽度优先分析法③算符优先分析法④预测递归分析法C、D:①语法树②有向无环图③最左推导④最右推导E:①右递归②左递归③直接右递归④直接左递归A:④ B:③ C:③ D:④ E:②4.21 自底向上语法分析采用__A__分析法,常用的是自底向上语法分析有算符优先分析法和LR分析法。
LR分析是寻找右句型的 __B__;而算符优先分析是寻找右句型的__C__。
LR分析法中分析能力最强的是__D__;分析能力最弱的是__E__。
A:①递归②回溯③枚举④移进-规约B、C:①短语②素短语③最左素短语④句柄D、E:①SLR(1) ②LR(0) ③LR(1) ④LALR(1)A:④ B:④ C:③ D:③ E:②5.5 用S的综合属性val给出在下面的文法中的S产生的二进制数的值(例如,对于输入101.101,S.val=5.625):S→L.L|L L→LB|B B→0|1(1)试用各有关综合属性决定S.val。
(2)试用一个语法制导定义来决定S.val,在这个定义中仅有B的综合属性,设为c,它给出由B 生成的位对于最后的数值的贡献。
例如,在101.101中的第一位和最后一位对于值B -> 0 B.val:=0;B -> 1 B.val:=1;注:L.p表示恢复L.val的因子。
(2)分析:设B.c是B的综合属性,是B产生的位对最终值的贡献。
要求出B.c,必须求出B 产生位的权,设B.i。
B.i的求法请参看下面的图示:另外,设L.fi为继承因子,L.fs为综合因子,语法制导定义如下:产生式语义规则S -> L L.i:=1; L.fi:=2; L.fs:=1; S.val:=L.val;L1.i=1; L1.fi=2; L1.fs:=1;S -> L1.L2L2.i=2-1; L2.fi=1; L2.fs:=2-1;S.val:=L1.val+L2.val;L -> B L.s:=L.i; B.i:=L.s; L.val:=B.c;5.15描述文法符号语义的属性有两种,一种称为( A ),另一种称为( B )。
( A )值的计算依赖于分析树中它的( C )的属性值;( B )的值的计算依赖于分析树中它的( D )的属性值。
A,B: ①L-属性②R-属性③综合属性④继承属性C,D: ①父结点②子结点③兄弟结点④父结点与子结点⑤父结点与兄弟结点解答: A ③ B ④ C ② D ⑤5.16(1) 语法制导定义中某文法符号的一个属性,既可以是综合属性,又可以是继承属性。
(2) 只使用综合属性的语法制导定义称为S-属性定义。
(3) 把L-属性定义变换成翻译模式,在构造翻译程序的过程中前进了一大步。
(4)一个特定的翻译模式既适于自顶向下分析,又适于自底向上分析。
(5) 用于自顶向下分析的翻译模式,其基础文法中不能含有左递归。
(6) 在基础文法中增加标记非终结符不会导致新的语法分析冲突。
解答:(1) FALSE (2) TRUE (3) TRUE (4) FALSE(5) TRUE (6) FALSE6.7 (1) 对于允许递归调用的程序语言,程序运行时的存储分配策略不能采用静态的存储分配策略。