编译原理期末复习总结

合集下载

编译原理复习总结

编译原理复习总结

编译原理复习总结⼀、编译器概述1、名词解释1.1解释下列名词源语⾔:被翻译器翻译的语⾔,⽤于书写源程序的语⾔。

⽬标语⾔:被翻译器翻译之后得到的语⾔,⽤于书写⽬标程序的语⾔翻译器:能够完成从⼀种语⾔到另⼀种语⾔的变换的软件编译器:⼀种特殊的翻译器,要求⽬标语⾔⽐源语⾔低级解释器:解释器是不同于编译器的另⼀种语⾔处理器。

解释器不像编译器那样通过翻译来⽣成⽬标程序,⽽是直接执⾏源程序所指定的运算。

2、编译阶段1.2典型的编译器可以划分成⼏个主要的逻辑阶段?各阶段的主要功能是什么?典型的编译器可以划分成七个主要的逻辑阶段,分别是词法分析器、语法分析器、语义分析器、中间代码⽣成器、独⽴于机器的代码优化器、代码⽣成器、依赖于机器的代码优化器。

各阶段的主要功能:(1)词法分析器:词法分析阅读构成源程序的字符流,按编程语⾔的词法规则把它们组成词法记号流。

(2)语法分析器:按编程语⾔的语法规则检查词法分析输出的记号流是否符合这些规则,并依据这些规则所体现出的该语⾔的各种语⾔构造的层次性,⽤各记号的第⼀元建成⼀种树形的中间表⽰,这个中间表⽰⽤抽象语法的⽅式描绘了该记号流的语法情况。

(3)语义分析器:使⽤语法树和符号表中的信息,依据语⾔定义来检查源程序的语义⼀致性,以保证程序各部分能有意义地结合在⼀起。

它还收集类型信息,把它们保存在符号表或语法树中。

(4)中间代码⽣成器:为源程序产⽣更低级的显⽰中间表⽰,可以认为这种中间表⽰是⼀种抽象机的程序。

(5)独⽴于机器的代码优化器:试图改进中间代码,以便产⽣较好的⽬标代码。

通常,较好是指执⾏较快,但也可能是其他⽬标,如⽬标代码较短或⽬标代码执⾏时能耗较低。

(6)代码⽣成器:取源程序的⼀种中间表⽰作为输⼊并把它映射到⼀种⽬标语⾔。

如果⽬标语⾔是机器代码,则需要为源程序所⽤的变量选择寄存器或内存单元,然后把中间指令序列翻译为完成同样任务的机器指令序列。

(7)依赖于机器的代码优化器:试图改进⽬标机器代码,以便产⽣较好的⽬标机器代码。

编译原理第三版期末复习

编译原理第三版期末复习

期末复习总结《编译原理》第一章:绪论一、填空问题①由于计算机只能认识机器语言,所以需要翻译程序将高级语言翻译成计算机可以识别的机器语言。

②编译程序的工作过程一般主要划分为词法分析,语法分析,中间代码生成,代码优化,目标代码生成等几个基本阶段,同时还会伴有表格管理和出错处理。

③如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两个阶段:编译阶段和运行阶段。

如果编译程序生成的目标程序是汇编语言的程序,则源程序的执行分为三个阶段:编译阶段,汇编阶段和运行阶段。

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 。

编译原理期末总结复习

编译原理期末总结复习

编译原理期末总结复习编译原理期末总结复习篇一:一、简答题1.什么是编译程序?答:编译程序是一种将高级语言程序(源程序)翻译成低级语言(目标程序)的程序。

将高级程序设计语言程序翻译成逻辑上等价的低级语言(汇编语言,机器语言)程序的翻译程序。

2.请写出文法的形式定义?答:一个文法G抽象地表示为四元组 G=(Vn,Vt,P,S)–其中Vn表示非终结符号– Vt表示终结符号,Vn∪Vt=V(字母表),Vn∩Vt=φ– S是开始符号,–P是产生式,形如:α→β(α∈V+且至少含有一个非终结符号,β∈V*)3.语法分析阶段的功能是什么?答:在词法分析的基础上,根据语言的语法规则,将单词符号串分解成各类语法短语(例:程序、语句、表达式)。

确定整个输入串是否构成语法上正确的程序。

4.局部优化有哪些常用的技术?答:优化技术1—删除公共子表达式优化技术2—复写传播优化技术3—删除无用代码优化技术4—对程序进行代数恒等变换(降低运算强度)优化技术5—代码外提优化技术6—强度削弱优化技术7—删除归纳变量优化技术简介——对程序进行代数恒等变换(代数简化)优化技术简介——对程序进行代数恒等变换(合并已知量)5.编译过程分哪几个阶段?答:逻辑上分五个阶段:词法分析、语法分析、语义分析与中间代码生成、代码优化、目标代码生成。

每个阶段把源程序从一种表示变换成另一种表示。

6. 什么是文法?答:文法是描述语言的语法结构的形式规则。

是一种工具,它可用于严格定义句子的结构;用有穷的规则刻划无穷的集合;文法是被用来精确而无歧义地描述语言的句子的构成方式;文法描述语言的时候不考虑语言的含义。

7. 语义分析阶段的功能是什么?答:对语法分析所识别出的各类语法范畴分析其含义,进行初步的翻译(翻译成中间代码);并对静态语义进行审查。

8.代码优化须遵循哪些原则?答:等价原则:不改变运行结果有效原则:优化后时间更短,占用空间更少合算原则:应用较低的代价取得较好的优化效果9.词法分析阶段的功能是什么?答:逐个读入源程序字符并按照构词规则切分成一系列单词任务:读入源程序,输出单词符号—滤掉空格,跳过注释、换行符—追踪换行标志,指出源程序出错的行列位置—宏展开,……10.什么是符号表?答:符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息。

(完整word版)编译原理期末考试复习整理(详细列出考试重点+重点例题)

(完整word版)编译原理期末考试复习整理(详细列出考试重点+重点例题)

目录第一章 (2)词法分析: (2)语义法分析 (2)中间代码 (2)第二章 (2)1.根据语言写出文法 (2)2.根据文法写语,描述其特点(必考大题2-3类型) (3)3.文法的规范推导、语法树、短语、句柄(必考大题,2-7,2-11) (4)第三章 (10)1.给出一个正规文法(左线性、右线性方法),写出其状态转换图(必考) (10)1.1右线性文法写出状态转换图(必考) (10)1.2状态转换图写出右线性文法G (11)1.3左线性文法写出状态转换图(必考) (12)2.非确定自动机的确定化 (13)第四章 (14)第五章 (14)属性文法与属性翻译文法 (14)逆波兰式(大题) (14)四元式(大题) (15)第一章词法分析:分析源程序的结构,判断它是否是相应程序设计语言的合法程序语义法分析的任务是根据语言的语义规则对语法分析得到的语法结构进行静态的语义检查(确定类型、类型与运算合法性检查、识别含义等),并且转换成另一种内部形式(语义树)表示出来或者直接用目标语言表示出来。

中间代码是一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种多样的形式,重要的设计原则为两点:一是容易生成;二是便于优化、移值;三是容易将它翻译成目标代码第二章文法G定义为四元组(V N,V→,P,S )其中V N为非终结符号(或语法实体,或变量)集;V→为终结符号集;P为产生式(也称规则)的集合;V N,V→和P是非空有穷集。

S称作识别符号或开始符号,它是一个非终结符,至少要在一条产生式中作为左部出现。

V N和V→不含公共的元素,即V N ∩V→= φ,通常用V表示V N∪V→,V称为文法G的字母表或字汇表。

一个文法的有如下几种写法①G=({S,A},{a,b},P,S)其中P:S→aAbA→abA→aAbA→ε②G:S→aAbA→abA→aAbA→ε③G[S]:A→ab A→aAb A→εS →aAb④G[S]:A→ab |aAb |εS→aAb1.根据语言写出文法2.构造产生下列语言的文法(1){ a n b n |n≥0}解:对应文法为G(S) = ({S},{a,b},{ S→ε| aSb },S)(2){anbmcp|n,m,p≥0}解:对应文法为G(S) = ({S,X,Y},{a,b,c},{S→aS|X,X→bX|Y,Y→cY|ε},S)(3){a n#b n,|n≥0}∪{c n#d n |n≥0}解:对应文法为G(S) = ({S,X,Y},{a,b,c,d,#}, {S→X, S→Y,X→aXb|#,Y →cYd|# },S)或者G[S]: S→X|YX→aXb|#Y→cYd|#(4){w#wr# | w?{0,1}*,wr是w的逆序排列}解:G(S) = ({S,W,R},{0,1,#}, {S→W#, W→0W0|1W1|# },S)(5)任何不是以0打头的所有奇整数所组成的集合解:G(S) = ({S,A,B,I,J},{-,0,1,2,3,4,5,6,7,8,9},{S→J|IBJ,B→0B|IB|e, I→J|2|4|6|8, Jà1|3|5|7|9},S)(6)所有偶数个0和偶数个1所组成的符号串集合解:对应文法为 S→0A|1B|e,A→0S|1C B→0C|1S C→1A|0B2.根据文法写语,描述其特点(必考大题2-3类型)例3 写出文法G:(1) S→aSBE(2) S→aBE(3) EB→BE (4) aB→ab(5) bB→bb (6) bE→be(7) eE→ee 所产生的语言。

编译原理知识点汇总

编译原理知识点汇总

编译原理的复习提纲1.编译原理=形式语言+编译技术2.汇编程序:把汇编语言程序翻译成等价的机器语言程序3.编译程序:把高级语言程序翻译成等价的低级语言程序4.解释执行方式:解释程序,逐个语句地模拟执行翻译执行方式:翻译程序,把程序设计语言程序翻译成等价的目标程序5.计算机程序的编译过程类似,一般分为五个阶段:词法分析、语法分析、语义分析及中间代码生成、代码优化、目标代码生成词法分析的任务:扫描源程序的字符串,识别出的最小的语法单位(标识符或无正负号数等)语法分析是:在词法分析的基础上的,语法分析不考虑语义。

语法分析读入词法分析程序识别出的符号,根据给定的语法规则,识别出各个语法结构。

语义分析的任务是检查程序语义的正确性,解释程序结构的含义,语义分析包括检查变量是否有定义,变量在使用前是否具有值,数值是否溢出等。

语法分析完成之后,编译程序通常就依据语言的语义规则,利用语法制导技术把源程序翻译成某种中间代码。

所谓中间代码是一种定义明确、便于处理、独立于计算机硬件的记号系统,可以认为是一种抽象机的程序代码优化的主要任务是对前一阶段产生的中间代码进行等价变换,以便产生速度快、空间小的目标代码编译的最后一个阶段是目标代码生成,其主要任务是把中间代码翻译成特定的机器指令或汇编程序编译程序结构包括五个基本功能模块和两个辅助模块6.编译划分成前端和后端。

编译前端的工作包括词法分析、语法分析、语义分析。

编译前端只依赖于源程序,独立于目标计算机。

前端进行分析编译后端的工作主要是目标代码的生成和优化后端进行综合。

独立于源程序,完全依赖于目标机器和中间代码。

把编译程序分为前端和后端的优点是:可以优化配置不同的编译程序组合,实现编译重用,保持语言与机器的独立性。

7.汇编器把汇编语言代码翻译成一个特定的机器指令序列第二章1.符号,字母表,符号串,符号串的长度计算P18,子符号串的含义,符号串的简单运算XY,X n,2.符号串集合的概念,符号串集合的乘积运算,方幂运算,闭包与正闭包的概念P19,P20 A0 ={ε}3.重写规则,简称规则。

编译原理课程期末总结

编译原理课程期末总结

编译原理课程期末总结一、引言编译原理是计算机科学与技术专业必修的一门课程,主要讲授计算机程序语言的组织规则和程序的翻译方法。

本学期的编译原理课程,从基本概念开始,逐渐深入到词法分析、语法分析、语义分析和代码生成等内容。

通过学习编译原理,我对程序的编写和翻译有了更深入的理解,并且提高了编写高效程序的能力。

本文将对本学期编译原理课程的学习内容以及个人体会进行总结和归纳。

二、课程学习内容1. 基本概念在编译原理的第一节课中,老师给我们介绍了编译原理的基本概念。

编译器是将源语言程序翻译成目标语言程序的一种软件。

它包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等阶段。

我们学习了编译器的整体结构和各个阶段的作用。

2. 词法分析词法分析是编译器的第一阶段,它负责将源程序分割成一个个单词(Token)。

在本学期的编译原理课程中,我们学习了正则表达式、DFA(Deterministic Finite Automaton)和NFA(Nondeterministic Finite Automaton)的概念。

通过实践,我了解了如何用正则表达式描述词法单元的集合,并将正则表达式转化为NFA和DFA。

3. 语法分析语法分析是编译器的第二阶段,它负责将词法分析得到的单词序列解析成语法树。

在本学期的编译原理课程中,我们学习了上下文无关文法和语法分析算法。

我通过实现LL(1)语法分析器和LR(1)语法分析器,深入理解了语法分析的原理与方法。

4. 语义分析语义分析是编译器的第三阶段,它负责对语法树进行静态检查和语义处理。

在本学期的编译原理课程中,我们学习了符号表的管理和使用、类型检查和类型转换等内容。

通过实践,我掌握了如何设计和实现一个简单的语义分析器。

5. 中间代码生成中间代码生成是编译器的第四阶段,它负责将语法树转化为中间代码。

在本学期的编译原理课程中,我们学习了三地址码和四元式的表示方法,以及中间代码的生成和优化等内容。

编译原理复习汇总

编译原理复习汇总

复习汇总一、第一章概述1.文法与自动机的等价1)0型文法—图灵机2)1型文法—线性有界非确定图灵机3)2型文法—非确定下推自动机4)3型文法—有限状态自动机2.编译技术的应用1)语法制导的结构化编辑器2)程序格式化工具3)软件测试工具4)程序理解工具5)高级语言的翻译工具6)等等3.从面向机器的语言到面向人类的语言(结合第二章第9小点理解)1)面向机器的语言:机器指令,汇编语言2)面向人类的语言:通用程序设计语言,数据查询语言,形式化描述语言(正规式,产生式)等等。

4.各语言的分类(结合第二章第9小点理解)1)过程式语言,面向对象语言:通用程序设计语言。

2)函数语言:面向特点领域的,递归特性。

例如LISP语言3)说明性,非算法式语言:LEX/YACC,SQL。

4)脚本式语言:Shell语言5.语言之间的转换(李静PPT41)1)高级语言之间的转换一般称为预处理或转换。

2)高级语言翻译成汇编语言或机器语言称之为编译。

3)把汇编语言翻译成机器语言称之为汇编。

4)将一个汇编语言程序汇编为可在另一台机器上运行的机器指令称之为交叉汇编。

5)把机器语言翻译成汇编语言称之为反汇编。

6)把汇编语言翻译成高级语言称之为反编译。

6.编译器和解释器1)编译器●源程序的翻译和翻译后的程序的运行是两个不同的阶段。

◆编译阶段:用户输入源程序,经过编译器的处理,生成目标程序。

◆目标程序的运行阶段:根据要求输入数据,得出结果。

2)解释器(凡是可以采用编译器的地方均可以采用解释器)●解释器把翻译和运行结合到一起,编译一段源程序,紧接着就执行它。

这种方式称为解释。

7.解释器的优点(对比与编译器)1)具有较好的动态特性。

2)具有较好的移植特性。

8.解释器的缺点(对比于编译器)1)相比于编译器需花费大量的时间。

2)占用更多的内存空间。

9.编译器的工作阶段(结合第二章6小点红色部分理解)1)源程序->词法分析器->语法分析器->语义分析器->中间代码生成器->代码优化器->目标代码生成器->目标代码2)工作过程中的每个阶段均采用了符号表管理器,出错处理器。

编译原理期末复习总结

编译原理期末复习总结
例:化简文法G[S]
1文法的类型
通过对产生式施加不同的限制,Chomsky将文法分为四种类型:? 0型文法? 1型文法
? 2型文法? 3型文法
0型文法(短语文法)
对任一产生式 ,都有 且 至少包含一个非终结符,? 0型文法又称为无限制文法? 其所描述的0型语言又称无限制语言
AB={ x y | x A , y B } 满足条件的所有xy的集合。
例:符号串集合A={ab,aa},B={ba,bb}
乘积AB={abba,abbb,aaba,aabb}
注:{ε}A=A{ε}=A
3 符号串的幂运算
符号串自身连接n次得到的符号串
如:x的n次连接为xx…..x(n个x),也可 记 NhomakorabeaX^n
注:x0=ε
4 集合的幂运算
集合A连接自身n次所得到的集合
假设A={a,b}
A0={ }
A1=A={a,b}
A2=AA={aa,bb,ab,ba}
A A1A2,…,Ak一定是P中的一个产生式
1 语法树
子树:某一结点连同所有分支组成的部分
短语:子树的叶子结点形成的符号串
直接短语:单层分支子树所形成的短语
句柄:最左直接短语
若一个文法存在某个句型对应两棵不同的语法树,则称这个文法是二义的。
若一个文法存在某个句型有两个不同的最左(最右)推导,则称这个文法是二义的。
3型文法(正规文法)
例子 G(S):S 0A|1B|0
A 0A|1B|0S
B 1B|1|0
例 文法G(S):S aB|bA
A a|aS|bAA
例1 设L1={a2n,b2n|n>=1},试构造出生成L1的文

编译原理期末要点总结

编译原理期末要点总结

第一章引论什么叫编译程序翻译程序:把某一种语言程序转换成另一种语言程序编译程序:把高级语言程序转换成低级语言程序的翻译程序汇编程序:把汇编语言程序翻译成机器语言程序编译执行与解释执行编译执行:源程序编译成目标程序后执行。

解释执行:不产生目标代码边解释边执行。

编译程序阶段1. 词法分析2. 语法分析3. 语义分析与中间代码生成4. 优化5. 目标代码生成遍:对源程序或源程序的中间结果从头到尾扫描一次。

编译前端:由与源语言有关但与目标机无关。

词法分析、语法分析、语义分析与中间代码生成。

编译后端:与目标机有关。

优化、目标代码生成。

编译工具生成越来越多的人已使用高级语言作工具来编译程序。

第二章高级语言及其语法描述程序语言的定义程序语言由语法和语义两方面定义。

语法语法是一组规则,分为词法规则(规定了字母表中哪样的字符串是一个单词符号)和语法规则(规定了如何从单词符号形成更大的结构)。

语义定义一个程序的意义的一组规则。

程序语言的语法描述∑(Sigma):有穷字母表。

符号:∑中的每个元素。

符号串:符号所构成的一个有穷序列。

ε(Epsilon):空字,不包含任何符号的序列。

∑*(∑的闭包):∑上的所有符号串的全体,包括ε。

连接积:UV={αβ|α∈ U&β∈ V } U、V⊆ ∑*●UV不一定等于 VU●V n=VV…V(n个V的连接积)●V0 = {ε}●V*=V0 ∪ V1 ∪ V2 ∪ V3 ∪ …●V+(正则闭包)=VV*形式语言文法G是一个四元组(VT,VN,S,P)●VT:终结符号集(一般大写字母)●VN:非终结符号集(一般小写字母与各种符号)●S:开始符号●P:产生式集合(A→α)0型文法(短语文法)、1型文法(上下文有关文法)、2型文法(上下文无关文法)、3型文法(正规文法)描述能力 0型>1型>2型>3型上下文无关文法:产生式左侧为单一非终结符,右侧为终结符与非终结符的随意组合最左/右推导:任何一步α ⇒β都是对α中的最左/最右非终结符进行替换。

编译原理期末考试复习

编译原理期末考试复习

第一章:1.编译程序的步骤和任务:1)词法分析:从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词。

2)语法分析:是在词法分析基础上将单词序列分解成各类语法短语(比如程序、语句、表达式等),通过语法分析确定整个输入串是否构成一个语法上正确的程序。

3)语义分析:是审查源程序有无语义错误,为代码生成阶段收集类型信息。

4)中间代码产生:将源程序变成一种易于翻译成目标代码的内部表示形式。

5)代码优化:对前阶段生成的中间代码进行变换或改造,使生成的目标代码更为高效6)目标代码生成:把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。

2.前端和后端的概念,试问前端通常包括那些阶段,后端包括那些阶段?答:前端只依赖于源语言,与目标机无关。

编译程序的前端通常包括词法分析程序、语法分析程序、语义分析程序、中间代码生成程序及相关的表格管理程序和出错处理程序。

后端是指编译器中依赖于目标机器的部分,只与中间代码有关。

通常包括目标代码生成程序、代码优化程序以及相关的表格管理程序和出错处理程序。

遍(PASS):对输入文件(源程序或其等价的中间语言程序)从头到尾扫视,完成预定处理的过程。

一个多遍的编译程序较之一遍的编译程序可能少占内存,逻辑结构可能清晰些,但效率相对可能差点3.程序的正确与否:结构上的语法规则,语义上的语义规则。

翻译程序:汇编,解释,编译。

4.解释程序及其与编译程序的比较解释程序功能:源程序+初始数据=计算结果解释与编译的区别:工作模式:这是根本区别,编译把源程序翻译成目标代码,而解释直接得到计算结果,不生成目标代码。

存储区内容:编译方式翻译和执行分开,解释方式翻译和执行同时并允许修改源程序,因此二者存储组织不同。

效率:解释慢于编译,很多语言两种方式都有。

标识符:=表达式第三章:文法和语言1.文法的直观概念:一组判定规则。

在实践中,文法不包含多余产生式。

最全的编译原理知识点--完美总结

最全的编译原理知识点--完美总结

不容易掌握。 38.实现扩充语言编译程序的方式有: 直接法:直接接受扩充式语言,并按语言的语义规则处理。 间接法:接受串行源程序(或带并行指示标志的串行源程序),并行编译程序对源程序进 行并行性检查,将检测到的并行成分转换成并行语句。或者立即进行并行编译处理。 39.并行粒度是对并行执行任务或者事务大小的度量。 分为作业级,用户级,程序级,指令级(语 句级)。作业级粒度最大,指令级粒度最小。并行编译程序应该选择适当的并行粒度。 40.加速比 Sp 可认为是应用程序在单处理机上串行执行时间 Ts 和 p 个处理器并行执行的时 间 Tp 之比,即 Sp=Ts/Tp。分析比较并行编译程序所生成的目标程序的执行速度是可用此 指标。 41.并行硬件上实现神经模型和连接机制模型途径: 用大量的专门的神经元器件连接成特定的模型。用通用并行计算机支持各种连接模型。 第二章 1. 字母表:字母表是元素的非空有穷集合。字母表中的元素称为符号。 2. 符号串:符号的有穷序列成为符号串。什么符号也不包含的符号称为空符号串。符号串 中符号的个数称为符号的长度。 3. 符号串相等 若 xy 是集合上的两个符号串。且符号串的每个元素和元素的位置均相等时 符号串相等。 4. 符号串的正闭包:A+ 为集合 A 上所有符号串的集合。 5. 符号串的自反闭包:A* 自反闭包不包含 A 本身 A+=AA*=A*A 6. 文法: 文法是对语言结构的定义与描述。 即从形式上用于描述和规定语言结构的称为 “文 法” (或称为“语法” ) 。对于 we 妇女发 要研究它的句型、句子和语言。 7. 语法规则:我们通过建立一组规则,来描述句子的语法结构。规定用“::=”表示“由„„ 组成”或“定义为„„” 。 8. 产生式的定义;设 VN、 VT 分别是非空有限的非终结符号集和终结符号集, V=VN∪ VT ,VN∩VT=Φ 。 一个产生式是一个有序偶对(α ,β ),其中α ∈V+,β ∈V*,通常表示 为α →β 或α ::=β 。称α 为产生式的左部,称β 为产生式的右部。产生式又称为重写规 则,它意味着能将一个符号串用另一个符号串替换。 9. 文法的定义:文法 G =(VN,VT,P,S) 。VN:非终结符号集。VT:终结符号集。P: 产生式或规则的集合。S:开始符号(识别符号) S∈VN. 10.文法和语言分类 Chomsky 将文法分为四类:0 型、1 型、2 型、3 型。这几类文法的差别 在于对产生式施加不同的限制。 11.0 型文法:P: α ::=β 其中α ∈(VN∪VT)+,β ∈(VN∪VT)* 0 型文法称为短语结构文法。规则的左部和右部都可 以是符号串,一个短语可以产生另一个短语。 0 型语言:L0 这种语言可以用图灵机(Turing)接受。 12.1 型文法: P: γ 1Aγ 2::= γ 1δ γ 2 其中 γ 1,γ 2∈(VN∪VT)*, A∈VN, δ ∈ (VN∪VT)+ 称为上下文有关文法或上下文敏感文法。也即只有在 γ 1,γ 2 这样的上下文中才能把 A 改写为δ 1 型语言:L1 这种语言可以由一种线性界限自动机接受.

编译原理复习总结_东北大学

编译原理复习总结_东北大学

∴adbb 是句子
ε
ε
(接上页)
⑵ abc ? ∵ S => aAB => adBbB => ? => acB => ? => adBbc => ? => Acc => ?
又 S => aAc ∴ abc 不是句子。 ※ 也可以用 S a A d ? B S a A c
语法树证明: B S a A d ? S c
(接上页)
10. 语法分析 语法分析主要功能是识别短语和句型, 形式上说,语法分析是指对给定的符号串(), 判定其是否是某文法G(S)的句子。即 + 成立吗 ? Z => 11. 语法分析方法分类 1. 自顶向下法(推导法) 2. 自底向上法(归约法) 12. 四种实用分析方法及相应文法 适应于自顶向下的分析法 -- LL(1)文法 是指文法中, 具有相同左部的各产生式,其选择集合不相交。 适应于自底向上的分析法 -- LR(0)文法 是指文法的句 柄识别器(有限自动机)无冲突项目。
⑴ 带有边的非确定的有限自动机(NFA) ⑵ 不带有边的非确定的有限自动机( NFA)
(接上页)
7. 词法分析任务 (1)识别单词—从用户的源程序中把单词分离出来; (2)翻译单词—把单词转换成机内表示,便于后续处理。 8. 单词的分类 标识符(i),常数(c),关键字(k),界符(p)。 9. 有限自动机作为单词识别器 l + ① d 滤掉回车换 … 行、空格! # 注 I|d ② ③ - 标识符|关键字 d ④ ⑤无符号整数 ⑥ 界符 ⑩如何区别标识符|关键字? 通过查关键字表决定之: 若表中存在,则视为关键字;否则视为标识符!
四. 词法分析 1. 2个实验。 2. 会写TOKEN 序列; 3. 词法分析技术应用; 五. 语法分析 ⒈ ⒉ 判断一个文法是否是 LL(1)文法; 给定文法,构造递归子程序(框图)

编译原理期末复习

编译原理期末复习

编译原理期末复习鉴于编译原理马上就要期末考试,我将手中集中的一些资料上的题目进行了整理归类,每种类型题目给出了所涉及到的基本知识,然后对每类题目中的第一道例题进行了做法进行了讲解,剩下的例题请给大家作为练习,答案也都给出,希望对大家复习有所帮助,最后由于时间很紧,整理的有些仓促,整理中难免有遗漏或错误,请大家见谅。

注:下面出现的字母中,若无特别说明,小写英文字母为终结符,大写英文字母为非终结符,希腊字母为终结符与非终结符的任意组合。

1、简答题(或者名词解释)下面涉及到的概念中,加下划线的都是在以往一些试卷中出现的原题,务必掌握。

注:这类题目老师说答案不会超过一百个字,否则写的再多也不给分,有些点到即可,不要重复啰嗦。

(1)简述编译程序的概念及其构成答:1)编译程序:它特指把某种高级程序设计语言翻译成等价的低级程序设计语言的翻译程序。

2)构成:(2)简述词法分析阶段的主要任务(也有可能问语法分析阶段主要任务)答:词法分析的任务是输入源程序,对源程序进行扫描,识别其中的单词符号,把字符串形式的源程序转换成单词符号形式的源程序。

语法分析的主要任务是对输入的单词符号进行语法分析(根据语法规则进行推导或者归约),识别各类语法单位,判断输入是不是语法上正确的程序(3) 简述编译程序的构造过程(这个大家看看,是对(1)和(2)的综合)答:1)构造词法分析器:用于输入源程序进行词法分析,输出单词符号;2)构造语法分析器:对输入的单词符号进行语法分析,识别各类语法单位,判断输入是不是语法上正确的程序3)构造语义分析和中间代码产生器:按照语义规则对已归约出的语法单位进行语义分析并把它们翻译成中间代码。

4)构造优化器:对中间代码进行优化。

5) 构造目标代码生成器:把中间的代码翻译成目标程序。

6) 构造表格管理程序:登记源程序的各类信息和编译各阶段的进展情况。

7)构造错误处理程序:对出错进行处理。

(4) 说明编译和解释的区别:1)编译要程序产生目标程序,解释程序是边解释边执行,不产生目标程序;2)编译程序运行效率高而解释程序便于人机对话。

编译原理期末总结

编译原理期末总结

编译原理期末总结编译原理是计算机科学中的一门重要课程,它涵盖了从程序的源代码到可执行代码的整个过程。

在本学期的学习中,我通过理论学习和实践项目的方式,深入了解了编译原理的重要概念和实践技术,对编译器的原理和设计有了更深入的了解。

在本文中,我将对编译原理的重要内容进行总结并分享我的学习收获。

一、编译原理的基础知识在学习编译原理之前,我们需要了解计算机的基础知识和概念,例如计算机的组成原理、计算机体系结构和计算机操作系统等。

这些基础知识对我们理解编译原理起到了重要的辅助作用。

1. 计算机的组成原理计算机由硬件和软件两部分组成,硬件指的是计算机的物理部分,包括CPU、内存、硬盘等。

而软件指的是运行在计算机上的程序。

2. 计算机体系结构计算机体系结构是计算机硬件和软件之间的接口,包括指令集体系结构和系统结构。

指令集体系结构定义了计算机的机器语言和指令集编码规范,系统结构定义了计算机的组成和连接方式。

3. 计算机操作系统计算机操作系统是一个管理和控制计算机硬件资源的软件,它提供了基本的功能,如进程管理、内存管理和文件管理。

二、编译原理的基本概念编译原理是关于将高级语言编写的程序转化为机器语言的过程,它包括了词法分析、语法分析、语义分析、中间代码生成和代码优化等阶段。

1. 词法分析词法分析是将源代码中的字符流转化为词法单元流的过程。

在词法分析阶段,编译器会识别出关键字、标识符、常量等词法单元,并对它们进行标记和分类。

2. 语法分析语法分析是将词法单元流转化为语法树的过程。

在语法分析阶段,编译器会检查源代码是否符合语法规则,并将它们组织成一个由语法规则决定了语法结构的树状结构。

3. 语义分析语义分析是对语法树进行语义检查和语义修正的过程。

在语义分析阶段,编译器会检查类型一致性、变量声明和作用域等语义规则,并生成符号表来存储变量和函数的信息。

4. 中间代码生成中间代码生成是将源代码转换为一种中间表示形式的过程。

编译原理期末复习

编译原理期末复习

编译原理期末复习鉴于编译原理马上就要期末考试,我将手中集中的一些资料上的题目进行了整理归类,每种类型题目给出了所涉及到的基本知识,然后对每类题目中的第一道例题进行了做法进行了讲解,剩下的例题请给大家作为练习,答案也都给出,希望对大家复习有所帮助,最后由于时间很紧,整理的有些仓促,整理中难免有遗漏或错误,请大家见谅;注:下面出现的字母中,若无特别说明,小写英文字母为终结符,大写英文字母为非终结符,希腊字母为终结符与非终结符的任意组合;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图很容易画出来;。

编译原理期末复习题汇总

编译原理期末复习题汇总

3.2是非判断,对下面的陈述,正确的在陈述后的括号内写T,否则写F。

(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) T (6) 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}*}(3) 由0和1组成的符号串,且从右边开始数第3位为0。

(4) 含3个1的由0和1组成的符号串。

{α|α∈{0,1}+,且α中含有3个1 }(5) {α|α∈{0,1}*,α中0和1为偶数}3.4对于下列语言分别写出它们的正规表达式。

(1) 英文字母组成的所有符号串,要求符号串中顺序包含五个元音。

(2) 英文字母组成的所有符号串,要求符号串中的字母依照词典顺序排列。

(3) Σ={0,1}上的含偶数个1的所有串。

(4) Σ={0,1}上的含奇数个1的所有串。

(5) 具有偶数个0和奇数个1的有0和1组成的符号串的全体。

(6) 不包含子串011的由0和1组成的符号串的全体。

(7) 由0和1组成的符号串,把它看成二进制数,能被3整除的符号串的全体。

答案(1) 令Letter表示除这五个元音外的其它字母。

编译原理期末复习

编译原理期末复习

编译原理期末复习编译原理是计算机科学与技术专业的一门重要基础课程,它研究的是程序设计语言在计算机上的实现方式。

编译原理的学习主要涉及到词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等内容。

针对这些方面,下面将对编译原理的重要内容进行总结和复习。

一、词法分析词法分析是编译过程的第一步,其主要目的是将源程序中的字符序列划分成词法单位。

常用的词法单元有关键字、标识符、常数、运算符、界符等。

词法分析通过有限自动机或正则表达式来实现。

二、语法分析语法分析是将词法分析阶段生成的词法单元流转化为一个抽象语法树。

语法分析的主要工作是根据给定的语法规则,将输入串分析成语法树。

语法分析有两种主要方法:基于文法的自上而下的分析和基于文法的自下而上的分析,常用的算法包括LL(1)、LR(1)、SLR(1)和LALR(1)等。

三、语义分析语义分析是对语法分析的结果进行语义检查和语义动作的计算。

语义分析的主要任务是检查源程序是否符合语义规则,计算符号的类型和值,并生成中间代码。

语义分析常用的方法包括语义制导翻译和符号表的建立。

四、中间代码生成中间代码是指在编译过程中生成的一种可以被多次优化和被不同目标代码生成程序使用的代码。

中间代码生成的目的是将源程序翻译成其中一种中间形式,便于进一步优化和生成目标代码。

中间代码生成的方法有三地址码、四地址码和虚拟机代码等。

五、代码优化代码优化是编译过程中的重要环节,其主要目的是对中间代码进行优化,使得生成的目标代码更加高效和紧凑。

代码优化使用各种数据流分析、指令调度和寄存器分配等技术,常用的优化方法有常量传播、公共子表达式消除、代码移动和死代码消除等。

六、目标代码生成目标代码生成是将中间代码转化为目标机器代码的过程,目标代码生成需要考虑目标机器的特性和限制。

目标代码生成包括指令选择、寻址方式的选择和寄存器分配等步骤。

常用的技术有基于各种寻址方式的代码选择算法、寄存器分配算法和指令调度算法等。

编译原理总复习(框架例题)期末复习资料

编译原理总复习(框架例题)期末复习资料

3 属性文法
4 语义错误检测和恢复
掌握属性文法的概念和使用,以及如何使 用它们来定义和处理属性。
学习如何检测和恢复常见的语义错误,例 如类型错误、作用域错误等。
词法分析
正则表达式
学习如何使用正则表达式,以及如何将它们 转换为有限自动机。
有限自动机
掌握有限自动机的基本理论和实现,能够使 用它们来识别单词和标记。
掌握SLR(1)语法分析算法,以及如何
LR(1)语法分析算法
4
使用它们来实现编译器。
学习LR(1)语法分析算,并能使用 它们来构建上下文无关语法。
语义分析
1 语义动作
2 语法制导翻译
理解语义动作的概念,以及如何使用它们 来改变语法分析树,并获取有用的信息。
学习语法制导翻译的基本原则,并能用它 们来构造翻译方案。
正则表达式和有限自动机的转换
学习如何将正则表达式转换为有限自动机, 以及如何使用它们来识别复杂的单词和标记。
词法错误检测和恢复
掌握如何检测和恢复常见的词法错误,例如 拼写错误、符号错误等。
优化和代码生成
基本块划分
了解什么是基本块划分,以及 如何使用它们来提高代码的效 率。
控制流图
掌握控制流图的概念,以及如 何使用它们来优化代码。
编译原理总复习
这份期末复习资料将帮助你巩固编译原理的基础知识,包括语法分析、语义 分析、词法分析和优化和代码生成。让我们开始吧!
语法分析
1
上下文无关文法
学习如何构造和使用上下文无关文法,
LR(0)语法分析算法
2
以及如何使用它们来描述语法。
理解LR(0)语法分析算法,并能使用
Jison解析文本。
3

编译原理期末考试复习知识点

编译原理期末考试复习知识点

1.Chomsky把文法分为几种类型?什么是文法的二义性?1)分成四种类型,即0型、1型、2型和3型。

(1)0型文法:设G=(VN,VT,P,S),如果它的每个产生式α→β是这样一种结构:α∈(VN∪VT)*且至少含有一个非终结符,而β∈(VN∪VT)*,则G是一个0型文法。

(2)1型文法:若P中的每一个产生式α→β均满足|β|>=|α|,仅仅S->ε除外,则文法G是1型。

(3)若P中的每一个产生式α→β满足:α是非终结符,β∈(VN∪VT)*,则此文法称为2型的。

(4)若P中的每一个产生式的形式都是A→aB或A→a,其中A和B都是非终结符,a∈VT*,则G是3型文法。

2)如果文法G中的某个句子存在不只一棵语法树,则称该句子是二义性的。

如果文法含有二义性的句子,则称该文法是二义性的2. 简述DFA与NFA的区别:DFA每次输入只对应一个结果,而NFA的依次输入可能对应多个结果,形成一个结果集。

3.什么是算符文法?并举例说明设有文法G,如果G中没有形如A->…BC…的产生式,其中B,C为非终结符,则称G为算符文法。

例如:对于表达式的二义性文法E->E|E-E|E*E|E/E|E↑E|(E)|i 其中任何一个产生式中都不包含两个非终结符相邻的情况,因此该文法为算符文法。

4.什么是3型文法?什么是文法的语言?(1)若P中的每一个产生式的形式都是A→aB或A→a,其中A和B都是非终结符,a ∈VT*,则G是3型文法。

(2)文法的语言:文法是用于描述语言的语法结构的形式规则。

文法描述的语言是该文法一切句子的集合。

一个文法所描述的语言是唯一的。

5. 什么是文法的二义性?给出一个二义性文法实例(1)如果文法G中的某个句子存在不只一棵语法树,则称该句子是二义性的。

如果文法含有二义性的句子,则称该文法是二义性的书上:若一个文法中存在某个句子,有两个不同的最左(最右)推导,则该文法是二义的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、简答题
1.什么是编译程序?
答:编译程序是一种将高级语言程序(源程序)翻译成低级语言(目标程序)的程序。

将高级程序设计语言程序翻译成逻辑上等价的低级语言(汇编语言,机器语言)程序的翻译程序。

2.请写出文法的形式定义?
答:一个文法G抽象地表示为四元组 G=(Vn,Vt,P,S)
–其中Vn表示非终结符号
–Vt表示终结符号,Vn∪Vt=V(字母表),Vn∩Vt=φ
–S是开始符号,
–P是产生式,形如:α→β(α∈V+且至少含有一个非终结符号,β∈V*)
3.语法分析阶段的功能是什么?
答:在词法分析的基础上,根据语言的语法规则,将单词符号串分解成各类语法短语(例:程序、语句、表达式)。

确定整个输入串是否构成语法上正确的程序。

4.局部优化有哪些常用的技术?
答:优化技术1—删除公共子表达式
优化技术2—复写传播
优化技术3—删除无用代码
优化技术4—对程序进行代数恒等变换(降低运算强度)
优化技术5—代码外提
优化技术6—强度削弱
优化技术7—删除归纳变量
优化技术简介——对程序进行代数恒等变换(代数简化)
优化技术简介——对程序进行代数恒等变换(合并已知量)
5.编译过程分哪几个阶段?
答:逻辑上分五个阶段:词法分析、语法分析、语义分析与中间代码生成、代码优化、目标代码生成。

每个阶段把源程序从一种表示变换成另一种表示。

6. 什么是文法?
答:文法是描述语言的语法结构的形式规则。

是一种工具,它可用于严格定义句子的结构;
用有穷的规则刻划无穷的集合;文法是被用来精确而无歧义地描述语言的句子的构成方式;文法描述语言的时候不考虑语言的含义。

7. 语义分析阶段的功能是什么?
答:对语法分析所识别出的各类语法范畴分析其含义,进行初步的翻译(翻译成中间代码);
并对静态语义进行审查。

8.代码优化须遵循哪些原则?
答:等价原则:不改变运行结果
有效原则:优化后时间更短,占用空间更少
合算原则:应用较低的代价取得较好的优化效果
9.词法分析阶段的功能是什么?
答:
逐个读入源程序字符并按照构词规则切分成一系列单词
任务:读入源程序,输出单词符号
—滤掉空格,跳过注释、换行符
—追踪换行标志,指出源程序出错的行列位置
—宏展开,……
10.什么是符号表?
答:符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息。

这些信息一般以表格形式存储于系统中。

如常数表、变
量名表、数组名表、过程名表、标号表等等,统称为符号表。

对于符号表组织、构
造和管理方法的好坏会直接影响编译系统的运行效率。

11.什么是属性文法?
答:是在上下文无关文法的基础上,为每个文法符号(含终结符和非终结符)配备若干个属性值,对文法的每个产生式都配备了一组属性计算规则(称为语义规则)。

在语法分析
过程中,完成语义规则所描述的动作,从而实现语义处理。

12.什么是基本块?
答:是指程序中一顺序执行的语句序列,其中只有一个入口语句和一个出口语句,入口是其第一个语句,出口是其最后一个语句。

13.代码优化阶段的功能是什么?
答:对已产生的中间代码进行加工变换,使生成的目标代码更为高效(时间和空间)。

14.文法分哪几类?
答:文法有四种:设有G=(Vn,Vt,P,S),不同类型的文法只是对产生式的要求不同:0型文法(短文文法):G的每个产生式α→β满足:α∈V+且α中至少含有一个非
终结符,β∈V*
1型文法(上下文有关文法):如果G的每个产生式α→β均满足|β|>=|α|,仅当S→
ε除外,但S不得出现在任何产生式的右部
2型文法(上下文无关文法):G的每个产生式为A→β, A是一非终结符,β∈V*
3型文法(正规文法):G的每个产生式的形式都是:A→αB或A→α,其中A,B是
非终结符,α是终结符串。

(右线性文法)。

15.循环优化常用的技术有哪些?
答:代码外提;强度削弱;删除归纳变量。

16.什么是算符优先文法?
答:算符文法G的任何终结符a,b之间要么没有优先关系,若有优先关系,至多有
中的一种成立,则G为一算符优先文法。

二、计算题
(一)推导、最左推导、最右推导和语法树,复习表达式文法及相关例题。

1. 表达式的推导
例:G = ({E}, {i, +, *, (, ) } , P , E)
P:E → E+E | E*E | (E) | i
答:表达式(i)和(i+i)*i的推导:
E ⇒ (E) ⇒(i)
E ⇒ E*E ⇒ (E)*E ⇒ (E + E)*E ⇒ (i + E)*E ⇒(i + i)*E ⇒ (i + i)*i
(i+i)*i的最左推导过程:
E ⇒ E*E ⇒ (E)*E ⇒ (E + E)*E ⇒ (i + E)*E ⇒(i + i)*E ⇒ (i + i)*i
(i+i)*i的最右推导过程:
E ⇒ E*E ⇒ E*i ⇒ (E + E)*i ⇒ (E+ i)*i ⇒(i + i)*i
2.语法树
例:对文法G = ({E}, {i, +, *, (, ) } , P , E)
P:E → E + E | E * E | ( E ) | i
答:句子(i+i)*i 的语法树:
例:G = ({E}, {i, +, *, (, ) } , P , E)
P:E → E + E | E * E | ( E ) | i
答:句子( i * i + i)的语法树:
(1) E ⇒ (E) ⇒ (E + E) ⇒ (E * E + E) ⇒(i * E + E) ⇒ (i *i + i)
(二)给定语言求文法
(三)逆波兰式
(四)将for语句和if语句翻译成相应的四元式序列1.if
2.for
(五) 短语、素短语、最左素短语,FirstVT集和LastVT集的求解方法
(复习第四章算符优先文法相关内容)
1.短语、素短语、最左素短语
2.FirstVT集和LastVT集的求解方法
例:设文法为:
E' →#E#;T→F;E→E+T;F→P↑F | P;E→T ;P→(E);T→T*F;P→i;
3. 算符优先文法
算符优先文法的定义:
三、综合题
1.NFA的确定化和最小化(参看课件第三章62页:例5)
2.自顶向下分析(参看课件第四章(1)67页:综合练习)
例:求对应于下述文法的预测分析表:E →TE'
E' → +TE' |ε
T → FT'
T' → *FT' |ε
F →(E) |i
答:
1)首先求first集:
2)由于ε∈First(E'), ε∈First(T'), 求E'和T'的Follow集: 3)根据集合的值填表,得到:
例:设文法G(S):S→(L) | aS | a
L→L,S | S
(1)消除左递归和回溯;
(2)计算每个非终结符的First和Follow集;
(3)构造预测分析表。

答:(1) 消除左递归和回溯:
(2)
(3)构造预测分析表:
3.LR分析方法(参看课件第四章(3)28页及30页)
(附)
1.短语、直接短语、句柄
例:考虑如下文法: E =>T | E+T
T =>F | T*F
F =>i | (E)
求句型i1 * i2 + i3的短语、直接短语和句柄
答:E => F * i2 + i3 E => i1 * F + i3 E => i1 * i2 + F
E => T + i3(T =>T*
F =>i1 * i2)F=>i
E => i1 * i2 + i3
因此:短语有:i1, i2, i3, i1*i2, i1*i2+i3
直接短语有:i1, i2 , i3
句柄是:i1
i2 + i3 不是短语,因为E => i1 * E (E =>i2 +i3)
2.什么是语法制导翻译
语法制导翻译:定义翻译所必须的语义属性和语义规则,一般不涉及计算顺序。

语法制导翻译(Syntax-Directed Translations):
–一个句子的语义翻译过程与语法分析过程同时进行。

在文法中,文法符号有明确的意义,文法符号之间有确定的语义关系。

属性描述语义信息,语义规则描述属性间的的关系,将语义规则与语法规则相结合,在语法分析的过程中计算语义属性值。

相关文档
最新文档