2014《编译原理》期末复习资料(完整版).
- 格式:doc
- 大小:519.50 KB
- 文档页数:13
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.一个正规语言只能对应(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.(A)是一种典型的解释型语言。
A.BASIC B.C C.FORTRAN D.PASCAL12.把汇编语言程序翻译成机器可执行的目标程序的工作是由(B)完成的。
A. 编译器B. 汇编器C. 解释器D. 预处理器13.用高级语言编写的程序经编译后产生的程序叫(B)A.源程序 B.目标程序C.连接程序D.解释程序14.(C)不是编译程序的组成部分。
A.词法分析程序B.代码生成程序C.设备管理程序D.语法分析程序15.通常一个编译程序中,不仅包含词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成等六个部分,还应包括(C)。
A.模拟执行器B.解释器 C.表格处理和出错处理D.符号执行器16.编译程序绝大多数时间花在(D)上。
⒈编译程序的工作过程一般可以划分为词法分析、语法分析、语义分析、中间代码生成、代码优化和代码生成等几个基本阶段,同时还伴有表格处理和出错处理。
⒉若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序。
⒊编译方式与解释方式的根本区别在于是否生成目标代码。
⒋翻译程序是这样一种程序,它能将用甲种语言书写的程序转换成与其等价的乙种语言书写的程序。
⒌对编译程序而言,输入数据是源程序,输出结果是目标程序。
⒍运行编译程序的计算机称宿主机,运行编译程序所产生目标代码的计算机称目标机。
⒎当把编译程序划分成编译前端和编译后端时,前端主要由与源语言有关但与目标机无关的部分组成,编译后端包括编译程序中与目标机有关的部分,编译后端不依赖于源语言而仅仅依赖于中间语言。
⒏描述词法规则的有效工具是正规式,通常使用上下文无关文法来描述语法规则,使用属性文法描述语义规则。
⒐上下文无关文法包括以下四个组成部分:一组终结符号,一组非终结符号,一个开始符号,以及一组产生式。
⒑如果一个文法存在某个句子对应两棵不同的语法树,则这个文法是二义文法。
⒒消除文法的二义性的方法主要有:改写二义文法为非二义文法;为文法符号规定优先顺序和结合规则。
⒓自上而下语法分析中存在的主要问题是由左递归引起的无限循环问题和左公共因子引起的回溯问题。
⒕自上而下语法分析的基本思想是,对任何输入串,从文法的开始符号,即根结点出发,自上而下地为输入串建立一颗语法树。
递归下降分析器采用的是自上而下语法分析方法,非递归的预测分析器采用的是自上而下语法分析方法,LR分析器采用的是自下而上语法分析方法。
⒖预测分析器模型是由输入、输出、栈、总控程序和预测分析表组成。
⒗自下而上语法分析的基本思想是,从终结符号开始,逐步进行规约,直至规约到文法的开始符号,即从语法树的叶节点开始,步步向上规约,直到根结。
⒘LR分析器模型包括输入、输出、LR分析程序、栈和含有动作action与状态转换goto两部分的分析表。
编译原理期末总结复习(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如公文写作、报告体会、演讲致辞、党团资料、合同协议、条据文书、诗词歌赋、教学资料、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!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.什么是编译程序?答:编译程序是一种将高级语言程序(源程序)翻译成低级语言(目标程序)的程序。
编译原理知识点引论:⏹编译的概念⏹编译过程⏹编译程序的结构⏹编译程序的生成高级语言形式化:⏹上下文无关文法⏹终结符号、非终结符号、产生式⏹推导(最左/右)、归约(规范归约)、语法树⏹句子、句型(规范句型)、短语、直接短语、句柄⏹文法定义的语言⏹文法的二义性(理解)⏹0型、1型、2型、3型文法(前两种了解,后两种要掌握)词法分析:⏹词法分析器的功能⏹状态转换图⏹正规式与正规集⏹DFA、NFA⏹与正规式等价的FA、NFA的确定化、DFA的化简⏹正规文法(左/右线性文法)⏹正规式与正规文法的等价性⏹正规文法与FA的等价性⏹词法分析器自动构造工具LEX(了解)语法分析:⏹自上而下分析:LL(1)分析⏹文法的左递归、回溯⏹LL(1)文法条件(掌握)⏹FIRST集合、FOLLOW集合、SELECT集合⏹递归下降分析法(掌握)⏹预测分析法(掌握)⏹自下而上分析:移进-归约分析⏹算符优先分析法(理解)⏹算符优先文法⏹FIRSTVT集、LASTVT集⏹算符优先关系表⏹算符优先分析算法、素短语、最左素短语⏹LR分析法⏹LR分析算法⏹前缀、活前缀、LR(0)项目集规范族⏹识别活前缀的DFA(掌握)⏹LR(0)分析表、SLR(1)分析表(掌握)⏹LR(1)项目集规范族⏹LR(1)分析表、LALR(1)分析表(了解)⏹出错处理⏹语法分析器自动构造工具YACC(了解)语义分析和中间代码生成:⏹属性文法⏹属性、综合属性、继承属性⏹语义规则⏹翻译模式⏹中间语言(理解)⏹后缀式、三地址代码、抽象语法树、DAG图⏹带注释的语法树⏹一遍扫描的语法制导翻译(理解)⏹LR语法制导翻译技术⏹递归下降语法制导翻译技术符号表的组织与管理(了解)⏹符号表的作用⏹符号表的组织运行时的存储组织与管理(了解)⏹运行时存储器的划分⏹活动记录⏹简单栈式存储分配⏹堆式动态存储分配⏹临时变量的存储分配优化技术:(理解)⏹优化方法概述:⏹局部优化⏹三地址代码的基本块、流图⏹基本块的DAG表示⏹合并已知量、删除公共子表达式、删除无用赋值、交换代码顺序⏹循环优化⏹循环查找⏹代码外提、强度削弱、删除归纳变量⏹窥孔优化⏹冗余存取、删除不可达代码、控制流优化目标代码生成:(了解)⏹目标代码生成器的功能⏹模型机的代码生成算法⏹生成的目标代码较短⏹充分利用寄存器。
计算机语言的发展:机器语言、汇编语言、高级语言、命令语言。
翻译程序—编译和解释(笔译与口译/整篇提交与单句提交)[解释方式易于查错,执行效率低]区别在于是否生成目标代码程序语言一般分为低级语言和高级语言两大类面向机器的语言指的是由0/1代码组成的语言,其特点是计算机可直接识别,但可读性差,理解困难。
在此基础上产生了与人类自然语言比较接近的高级语言。
翻译程序能够将源程序转换成与其等价的目标程序。
对编译程序而言,输入数据是源程序,输出数据是目标程序。
如果编译生成的目标程序是机器代码,则源程序的执行分两大阶段(编译)和(执行);如果目标程序是汇编语言程序,则源程序的执行分三大阶段(编译),(汇编)和(执行)。
⏹ 中序遍历:中缀表示⏹ 前序遍历:波兰表示/前缀表示 ⏹ 后序遍历:逆波兰表示/后缀表示 中缀表示(a+①b)*(c+②d)+③e/f波兰表示——也就是前缀表示+③*+①a b+②c d/ef逆波兰表示——也就是后缀表示a b +①c d +②*ef/+ ③(x+6)/y-z*p+m 波兰表示+-/+x6y*zpm 逆波兰表示中间代码的特点:简单规范、与机器无关、易于优化与转换对代码进行等价变换以求提高执行效率,提高运行速度和节省存储空间[与机器无关的优化-与机器有关的优化]与机器无关的优化:局部优化[常量合并、公共字表达式的提取]、循环优化[强度削减、代码外提] while(i<10){T1=4*I;i=i+1;}==while(i<10){T1=T1+4}与机器有关的优化:寄存器的利用、体系结构、存储策略、任务划分 目标代码的形式具有绝对地址的机器指令 汇编语言形式的目标程序 模块结构的机器指令源程序-前段 目标程序-编译后端程序设计语言的语言处理程序是一种系统软件⏹ 编译过程中,语法分析器的任务是( )。
☐ B. 分析单词串是如何构成语句和说明的 ☐ C. 分析语句和说明是如何构成程序的 ☐ D. 分析程序的结构⏹ 编译程序与具体的机器有关,与具体的语言无关。
1》编译程序的框架图与功能块:(1)画出编译程序的总体结构,并简述各部分的主要功能:七个部分(2)编译程序的结构分为几个阶段,各阶段的任务是什么?答编译程序总框架(1)词法分析器,又称扫描器,输入源程序,进行词法分析,输出单词符号。
(2)语法分析器,简称分析器,对单词符号串进行语法分析(根据语法规则进行推导或规约),识别出各类语法单位,最终判断输入串是否构成语法上正确的“程序”。
(3)语义分析与中间代码产生器,按照语义规则对语法分析器归约出(或推导出)的语法单位进行语义分析并把它们翻译成一定形式的中间代码。
(4)优化器,对中间代码进行优化处理。
(5)目标代码生成器,把中间代码翻译成目标程序。
(6)表格管理,登记源程序的各类信息,编译各阶段的进展状况。
(7)出错管理,把错误信息报告给用户。
编译程序的结构分为五个阶段:(1)词法分析.任务是:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词(亦称单词符号或简称符号),如基本字,标识符,常熟,算符和界符。
(2)。
语法分析,任务是:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位(语法范畴)。
(3)语义分析与中间代码产生。
任务:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。
(4)优化。
任务在于对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效(省时间和空间)的目标代码。
(5)目标代码生成。
任务是:把中间代码(或优化出理之后)变换成特定机械上的低级语言代码。
2》.重要概念:a. 编译程序:是指能够把源语言程序转换成逻辑上等价的目标语言程序的一个程序。
b. 单词符号:是语言的基本组成成分,是人们理解和编写程序的基本要素,是语言中具有独立意义的最基本结构,它一般包括:基本字、标识符、常数、运算符和界符等c. 中间代码:是一种含义明确,便于处理的记号系统,它通常独立于具体的硬件。
第八节习题一、单项选择题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. 请简要解释编译原理的定义和作用。
编译原理是研究将高级语言源程序转化为等价的目标程序的一门学科。
它的主要作用是将高级语言的源代码翻译为计算机能够执行的目标代码,从而实现程序的运行。
2. 请列举并解释编译过程的各个阶段。
- 词法分析:将源代码划分为一个个词法单元,如变量、关键字等。
- 语法分析:根据语法规则,将词法单元组合为语法树,检查语法结构是否正确。
- 语义分析:对语法树进行语义检查,如类型匹配、作用域等。
- 中间代码生成:将语法树转化为中间代码表示形式,方便后续优化。
- 代码优化:对中间代码进行优化,提高程序执行效率。
- 目标代码生成:将优化后的中间代码转化为目标机器代码。
3. 请解释符号表在编译过程中的作用。
符号表是编译器在编译过程中用来管理变量、函数、类型等标识符的数据结构。
它的主要作用是记录标识符的相应属性,如类型、作用域等,以便在后续的语法、语义分析以及代码生成过程中进行查找、检查等操作。
4. 请简要解释LL(1)文法的定义和特点。
LL(1)文法是一种上下文无关文法,它具有以下特点:- 对于给定的非终结符,它的产生式右部的首符号不相同。
- 对于给定的产生式右部的首符号,它的产生式右部不相同。
- 通过向前查看一个符号,就能确定所选用的产生式。
5. 请简要解释词法分析器的作用和实现方式。
词法分析器的主要作用是将源代码分解为一个个词法单元,如变量名、关键字等。
它的实现方式一般采用有限自动机,通过定义正则表达式描述各个词法单元的模式,然后根据模式匹配的结果生成相应的词法单元。
答案仅为参考,请以实际考试为准。
编译原理-期末复习编译原理⼀、单选题1、将编译程序分为若⼲个“遍”是为了()。
BA.提⾼程序的执⾏效率B.使程序的结构更加清晰C.利⽤有限的机器内存并提⾼机器的执⾏效率D.利⽤有限的机器内存但降低了机器的执⾏效率2、构造编译程序应掌握()。
DA.源程序B.⽬标语⾔C.编译⽅法D.以上三项都是3、变量应当()。
CA.持有左值B.持有右值C.既持有左值⼜持有右值D.既不持有左值也不持有右值4、编译程序绝⼤多数时间花在()上。
DA.出错处理B.词法分析C.⽬标代码⽣成D.管理表格5、()不可能是⽬标代码。
DA.汇编指令代码B.可重定位指令代码C.绝对指令代码D.中间代码6、编译程序是对()。
DA.汇编程序的翻译B.⾼级语⾔程序的解释执⾏C.机器语⾔的执⾏D.⾼级语⾔的翻译7、正规式M1和M2等价是指()。
CA.M1和M2的状态数相等B.M1和M2的有象弧条数相等C.M1和M2所识别的语⾔集相等D.M1和M2状态数和有象弧条数相等8、如果⽂法G是⽆⼆义的,则它的任何句⼦()。
AA.最左推导和最右推导对应的语法树必定相同。
B.最左推导和最右推导对应的语法树可能相同。
C.最左推导和最右推导必定相同。
D.可能存在两个不同的最左推导,但它们对应的语法树相同。
9、⽂法G:S→S+T|TT→T*P|PP→(S)|i句型P+T+i的短语有()BA.i,P+TB. P,P+T,i,P+T +iB.P+T + i D. P,P+T,i10、产⽣正规语⾔的⽂法为()。
DA.0型B.1型C.2型D.3型11、⽂法G:S→b|?|(T)T→T?S|S则FIRSTVT(T)=() CA.{b,?,(}B.{b,?,)}C.{b,?,(,?}D.{b,?,),?}12、给定⽂法:A→bA | cc,下⾯的符号串中,为该⽂法句⼦的是()。
A①cc ②bcbc ③bcbcc ④bccbcc ⑤bbbcc可选项有:A.①B.①③④⑤C.①④D.①④⑤13、采⽤⾃上⽽下分析,必须()。
编译原理期末复习鉴于编译原理马上就要期末考试,我将手中集中的一些资料上的题目进行了整理归类,每种类型题目给出了所涉及到的基本知识,然后对每类题目中的第一道例题进行了做法进行了讲解,剩下的例题请给大家作为练习,答案也都给出,希望对大家复习有所帮助,最后由于时间很紧,整理的有些仓促,整理中难免有遗漏或错误,请大家见谅。
注:下面出现的字母中,若无特别说明,小写英文字母为终结符,大写英文字母为非终结符,希腊字母为终结符与非终结符的任意组合。
1、简答题(或者名词解释)下面涉及到的概念中,加下划线的都是在以往一些试卷中出现的原题,务必掌握。
注:这类题目老师说答案不会超过一百个字,否则写的再多也不给分,有些点到即可,不要重复啰嗦。
(1)简述编译程序的概念及其构成答:1)编译程序:它特指把某种高级程序设计语言翻译成等价的低级程序设计语言的翻译程序。
2)构成:(2)简述词法分析阶段的主要任务(也有可能问语法分析阶段主要任务)答:词法分析的任务是输入源程序,对源程序进行扫描,识别其中的单词符号,把字符串形式的源程序转换成单词符号形式的源程序。
语法分析的主要任务是对输入的单词符号进行语法分析(根据语法规则进行推导或者归约),识别各类语法单位,判断输入是不是语法上正确的程序(3) 简述编译程序的构造过程(这个大家看看,是对(1)和(2)的综合)答:1)构造词法分析器:用于输入源程序进行词法分析,输出单词符号;2)构造语法分析器:对输入的单词符号进行语法分析,识别各类语法单位,判断输入是不是语法上正确的程序3)构造语义分析和中间代码产生器:按照语义规则对已归约出的语法单位进行语义分析并把它们翻译成中间代码。
4)构造优化器:对中间代码进行优化。
5) 构造目标代码生成器:把中间的代码翻译成目标程序。
6) 构造表格管理程序:登记源程序的各类信息和编译各阶段的进展情况。
7)构造错误处理程序:对出错进行处理。
(4) 说明编译和解释的区别:1)编译要程序产生目标程序,解释程序是边解释边执行,不产生目标程序;2)编译程序运行效率高而解释程序便于人机对话。
一、选择题1.词法分析器的输出结果是__C___。
A.单词的种别编码B.单词在符号表中的位置C.单词的种别编码和自身值D.单词自身值2.正规式M 1 和M 2 等价是指__C___。
A.M1和M2的状态数相等B.M1和M2的有向边条数相等C.M1和M2所识别的语言集相等D.M1和M2状态数和有向边条数相等3.文法G:S→xSx|y所识别的语言是__C___。
A.xyx B.(xyx)* C.xnyxn(n≥0) D.x*yx*4.如果文法G是无二义的,则它的任何句子α__A___。
A.最左推导和最右推导对应的语法树必定相同B.最左推导和最右推导对应的语法树可能不同C.最左推导和最右推导必定相同D.可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握__D____。
A.源程序B.目标语言C.编译方法D.以上三项都是6.四元式之间的联系是通过__B___实现的。
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. 优化可生成__D___的目标代码。
A.运行时间较短 B.占用存储空间较小C.运行时间短但占用内存空间大D.运行时间短且占用存储空间小9.下列__C____优化方法不是针对循环优化进行的。
A. 强度削弱B.删除归纳变量C.删除多余运算D.代码外提10.编译程序使用__B___区别标识符的作用域。
A.说明标识符的过程或函数名B.说明标识符的过程或函数的静态层次C.说明标识符的过程或函数的动态层次D. 标识符的行号1.语言是AA.句子的集合B.产生式的集合C.符号串的集合D.句型的集合2.编译程序前三个阶段完成的工作是CA.词法分析、语法分析和代码优化B.代码生成、代码优化和词法分析C.词法分析、语法分析、语义分析和中间代码生成D.词法分析、语法分析和代码优化3.一个句型中称为句柄的是该句型的最左DA.非终结符号B.短语C.句子D.直接短语4.下推自动机识别的语言是CA.0型语言B.1型语言C.2型语言D.3型语言5.扫描器所完成的任务是从字符串形式的源程序中识别出一个个具有独立含义的最小语法单位即BA.字符B.单词C.句子D.句型6.对应Chomsky四种文法的四种语言之间的关系是BA.L0 L1 L2 L3 B.L3 L2 L1 L0C.L3=L2 L1 L0 D.L0 L1 L2=L37.词法分析的任务是AA.识别单词B.分析句子的含义C.识别句子D.生成目标代码8.常用的中间代码形式不含DA.三元式B.四元式C.逆波兰式D.语法树9.代码优化的目的是CA.节省时间B.节省空间C.节省时间和空间D.把编译程序进行等价交换10.代码生成阶段的主要任务是CA.把高级语言翻译成汇编语言B.把高级语言翻译成机器语言C.把中间代码变换成依赖具体机器的目标代码D.把汇编语言翻译成机器语言【D 】1.____型文法也称为正规文法。
编译原理期末复习编译原理是计算机科学与技术专业的一门重要基础课程,它研究的是程序设计语言在计算机上的实现方式。
编译原理的学习主要涉及到词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等内容。
针对这些方面,下面将对编译原理的重要内容进行总结和复习。
一、词法分析词法分析是编译过程的第一步,其主要目的是将源程序中的字符序列划分成词法单位。
常用的词法单元有关键字、标识符、常数、运算符、界符等。
词法分析通过有限自动机或正则表达式来实现。
二、语法分析语法分析是将词法分析阶段生成的词法单元流转化为一个抽象语法树。
语法分析的主要工作是根据给定的语法规则,将输入串分析成语法树。
语法分析有两种主要方法:基于文法的自上而下的分析和基于文法的自下而上的分析,常用的算法包括LL(1)、LR(1)、SLR(1)和LALR(1)等。
三、语义分析语义分析是对语法分析的结果进行语义检查和语义动作的计算。
语义分析的主要任务是检查源程序是否符合语义规则,计算符号的类型和值,并生成中间代码。
语义分析常用的方法包括语义制导翻译和符号表的建立。
四、中间代码生成中间代码是指在编译过程中生成的一种可以被多次优化和被不同目标代码生成程序使用的代码。
中间代码生成的目的是将源程序翻译成其中一种中间形式,便于进一步优化和生成目标代码。
中间代码生成的方法有三地址码、四地址码和虚拟机代码等。
五、代码优化代码优化是编译过程中的重要环节,其主要目的是对中间代码进行优化,使得生成的目标代码更加高效和紧凑。
代码优化使用各种数据流分析、指令调度和寄存器分配等技术,常用的优化方法有常量传播、公共子表达式消除、代码移动和死代码消除等。
六、目标代码生成目标代码生成是将中间代码转化为目标机器代码的过程,目标代码生成需要考虑目标机器的特性和限制。
目标代码生成包括指令选择、寻址方式的选择和寄存器分配等步骤。
常用的技术有基于各种寻址方式的代码选择算法、寄存器分配算法和指令调度算法等。
1.给出语言{a n b n a m b m | n,m≥0}的一个上下文无关文法。
(6分)
解:G[S]:S—>AB
A—>aAb |ε
B—>aBb |ε
2.给出语言{1 n 0 m 1 m0 n | n,m≥0}的一个上下文无关文法。
解:G[S]:S—>1S0 | A
A—>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 ε b
P102例题6.1及其分析.( 后加画语法树)
例6.1 设文法G[S]为:
(1)S—>aAcBe
(2)A—>b
(3)A—>Ab
(4)B—>d
对输入串abbcde#进行分析,检查该符号串是否是G[S]的句子。
一、计算分析题(60%)
1、正规式→ NFA→ DFA→最简DFA
P72第1题(1)、(4);
第一题1、构造下列正规式相应的DFA.
(1)1(0|1)*101
解:先构造NFA
除S,A外,重新命名其他状态,令AB为B、AC为C、ABZ为D,因为D含有Z(NFA的终态),所以
(4) b((ab)*|bb)*ab
解:先构造NFA
得到DFA如下所示:
P72第4题(a)
4、把下图确定化和最小化
解:确定化:
、{1},其中A为初态,A,B为终态,因此有:
最小化::
初始分划得终态组{A,B},非终态组{C}
Π0:{A,B},{C},对终态组进行审查,判断A和B是等价的,故这是最后的划分。
重新命名,以A、C
即DFA最小化如下:
第7题
7、给文法G[S]:
S→aA|bQ
A→aA|bB|b
B→bD|aQ
Q→aQ|bD|b
D→bB|aA
E→aB|bF
F→bD|aE|b
构造相应的最小的DFA。
解:先构造NFA:
将S、A、BZ、B、Q、DZ、D重新命名,分别用0、1、2、3、4、5、6表示。
因为2、5中含有Z,所以
Π0:{2,5},{0,1,3,4,6}
对{0,1,3,4,6}进行审查: {1,4}输入b到达{2,5},而{0,3,6}输入b到达{3,4,6},故得到新分划{1,4},{0,3,6}
Π1:{2,5},{1,4},{0,3,6}
对{0,3,6}进行审查: {0}经过b到达{2},{3,6}经过b到达{3,6},故得到新分划{0},{3,6}
Π3:得到最后划分{0},{1,4},{2,5},{3,6}
重新命名,以A,B,C,D分别代替{0},{1,4},{2,5},{3,6},其中A为始态,C为终态,可得到最小DFA 如下:
2、自顶向下方法
(一)设文法G(E):
E→ E + T|T
T→ T * F|F
F→ i | ( E )
(1) 判断是否为LL(1)文法.
(2) 构造文法的预测分析表.
解:详见P93-96例题。
(1)由于文法中含有左递归,所以必须先消除左递归,使文法变为:
E→T E`
E`→+TE`|ε
T→FT`
T`→*FT`|ε
F→ i| ( E )
FIRST集合如下:
FIRST(E)={(,i}
FIRST(E`)={+,ε}
FIRST(T)={(,i}
FIRST(T`)={*,ε}
FIRST(F)={(,i}
FOLLOW集合如下:
FOLLOW(E)={),#}
FOLLOW(E`)={),#}
FOLLOW(T)={+,),#}
FOLLOW(T`)={+,),#}
FOLLOW(F)={+,*,),#}
各产生式的SELECT集合如下:
SELECT(E→T E`)={(,i}
SELECT(E`→+TE`)={+}
SELECT(E`→|ε)={),#}
SELECT(T→FT`)={(,i}
SELECT(T`→*FT`)={*}
SELECT(T`→|ε)={+,),#}
SELECT(F→ i)={i }
SELECT(F→ ( E ))={(}
由上可知有相同左部产生式的SELECT集合的交集为空,故文法是LL(1)文法。
(2)构造文法的预测分析表如下:
(二) P101 6.(4) 改写下面文法为LL(1)文法,井对每个LL(1)文法构造相应的预测分析表。
解:
3、自底向上方法
已知文法G(E):
[0] S'→ E
[1] E→ E + T[2] E→ T
[3] T→ T * F[4] T→ F
[5] F→ ( E ) [6] F→ i
(1) 证明该文法是SLR(1)文法.
(2) 若已给出下面的SLR(1)分析表,试分析句子(i + ( * i ))#输入串出错的位置。
3、解:(1):
先分析LR(0)项目:
由上可见:
I1 ,I2 ,I9存在移进—归约冲突. 分析FOLLOW集:
因为:对I1 FOLLOW(S’)={ # }∩{ + }= ф
对I2FOLLOW(E)={ +,#, ) }∩{* }= ф
对I9FOLLOW(E)={ +,#, ) }∩{* }= ф
所以是SLR(1)文法。
(2):
4、(一) 给出语句 if a+b > b+c*d then while x*y>3 do x:=x-a*b else while b+c*d>10 do b:=b-(x*y+5) 相应的三地址代码.
(二) While a>0 ∨b<0do
Begin
X:=X+1;
if a>0 then a:=a-1
else b:=b+1 End;
翻译成四元式序列. (10分)
解:
(1) (j>,a,0,5)
(2) (j,_,_,3)
(3) (j<,b,0,5)
(4) (j,_,_,15)
(5) (+,x,1,T1)
(6) (:= ,T1,_,x)
(7) (j>,a,0,9)
(8) (j,_,_,12)
(9) (-,a,1,T2)
(10) (:= ,T2,_,a)
(11) (j,_,_,1)
(12) (+,b,1,T3)
(13) (:= ,T3,_,b)
(14) (j,_,_,1)
(15)
5、(一)设有基本块(10分)
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还被引用,请写出优化后的四元序列。
5(一)、解:(1)DAG:
(3分)
(2) 优化后的四元式
T3:=S-R
T4:=S+R
A:=5*T4
B:=T3+T4
(二) P255-257 DAG图
例试构造以下基本块G的DAG
(1)T0:=3.14
(2)T1:=2* T0
(3)T2:=R+r
(4)A:=T1 * T2
(5)B:=A
(6)T3:=2* T0
(7)T4:=R+r
(8)T5:=T3 * T4
(9)T6:=R-r
(10)B:=T5 *T6
(11)if B<=10 goto (1)
(1) 画出DAG图;
(2) 假设基本块出口时只有A,B还被引用,请写出优化后的四元序列。
解:(1)DAG图如下:
(2)四元序列如下:○1 T2:=R+r
○2 T6:=R-r
○3 A:=6.28* T2 ○4 B:=A*T6
四、
1.1
先给出NFA图:
画状态转换表:
得DFA如下图:
1.4
由 P72
第4题(a )。