编译原理复习汇总_第1页
编译原理复习汇总_第2页
编译原理复习汇总_第3页
编译原理复习汇总_第4页
编译原理复习汇总_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、语言:面向特点领域的,递归特性。例如LISP语言3) 说明性,非算法式语言:LEX/YACC,SQL。4) 脚本式语言:Shell语言5. 语言之间的转换(李静PPT41)1) 高级语言之间的转换一般称为预处理或转换。2) 高级语言翻译成汇编语言或机器语言称之为编译。3) 把汇编语言翻译成机器语言称之为汇编。4) 将一个汇编语言程序汇编为可在另一台机器上运行的机器指令称之为交叉汇编。5) 把机器语言翻译成汇编语言称之为反汇编。6) 把汇编语言翻译成高级语言称之为反编译。6. 编译器和解释器1) 编译器l 源程序的翻译和翻译后的程序的运行是两个不同的阶段。u 编译阶段:用户输入源程序,经过编译器

3、的处理,生成目标程序。u 目标程序的运行阶段:根据要求输入数据,得出结果。2) 解释器(凡是可以采用编译器的地方均可以采用解释器)l 解释器把翻译和运行结合到一起,编译一段源程序,紧接着就执行它。这种方式称为解释。7. 解释器的优点(对比与编译器)1) 具有较好的动态特性。2) 具有较好的移植特性。8. 解释器的缺点(对比于编译器)1) 相比于编译器需花费大量的时间。2) 占用更多的内存空间。9. 编译器的工作阶段(结合第二章6小点红色部分理解)1) 源程序-词法分析器-语法分析器-语义分析器-中间代码生成器-代码优化器-目标代码生成器-目标代码2) 工作过程中的每个阶段均采用了符号表管理器,

4、出错处理器。10. 编译器各阶段的工作过程(结合第二章6小点红色部分理解)1) 源程序通过词法分析器翻译成记号流,记号流通过语法分析产生语法树,然后根据语法树来进行适当的语义处理,语义分析产生符号表和中间代码。2) 符号表的格式:标识符,类型,分配的地址。3) 中间代码的格式:操作符,左操作数,右操作数,结果。4) 中间代码的优化:传值的代码可以省略。5) 目标代码生成:生成汇编指令,格式为:操作数 源码 目标。l 二元运算: OP source target target := source OP targetl 一元运算:MOVE source target tatget = source

5、。11. 各阶段工作归纳1) 词法分析:根据词法规则识别出源程序的各个记号(token),每个记号代表一类单词(lexeme),记号的分类如下:(第二章第4小点)l 关键字:如var、begin、end 等,不做他用,称为保留字。l 标识符:如x、y、z、sort等,在源程序中被用作变量名,过程名,类型名和标号等所有对象的名称。(用记号代替)l 字面量:如60、Xidian、University等,一般用于表示常数或字符串常量。(保留原样)l 特殊符号:=、*、+、-、;等运算符,分隔符(保留原样)。l 例:var x,y,z:real ; x:= y+z*60; var id1,id2,id

6、3:real;id1:=id2+id3*60;2) 语法分析:得到语言结构并以树来表示。3) 语义分析:考察结构正确的句子是否语义合法。4) 中间代码生成。5) 中间代码优化。6) 目标代码生成。7) 符号表管理:合理组织符号,便于各阶段查找,填写等。8) 出错处理:错误的种类词法错,语法错,静态语义错,动态语义错。12. 编译器的分析/综合模式。(PPT53)1) 前端(分析):语言结构的分析。(语法和语义分析)2) 后端(综合):语言意义的分析与处理。(代码的生成、优化)3) 中间代码:前段与后端的分解。二、 第二章 词法分析1. 词法分析:词法分析是编译过程中将字符流转换成为符号流的一个

7、工作阶段,是编译的第一步操作,其后续工作是语法分析(配合第一章第11小点理解)。1) 词法分析输入源代码。2) 词法分析输出记号流。3) 词法分析需要识别此发错无,即非法的符号、单词。但不识别语法错误。2. 词法分析器的作用1) 源程序由单词组成,单词是最小的语义单位。2) 词法分析器的功能:l 扫描源程序字符流。l 按照源程序的语法规则识别出各类单词符号。l 产生用于语法分析的记号序列。l 填写符号表。3) 辅助功能l 跳过源程序的注释和空白。l 把错误信息和源程序联系起来(错误定位)。l 宏预处理。3. 模式(规则)(patten):将产生和识别单词的规则称为模式(规则)。4. 记号(to

8、ken):按照某个模式识别出来的元素称为记号。(第一章和本章第11小点一同理解)1) 记号 = 记号的类别 + 记号的属性。(用于识别)2) 记号的类别:记号的类别可以用整形编码来表示。3) 记号的属性:根据记号的类别不同,记号的属性可以用不同的表示方法,如relation(81)的属性值为一个有限的可枚举的集合,可以用每个属性值在集合中的位置来表示它。(课本P16)。5. 单词(lexeme):被识别出元素自身的价值。(结合本章第9点理解)6. 词法分析器的作用和工作方式:1) 特征:编译器中唯一与源程序打交道的部分。2) 任务:(与第二章第2点一同理解)l 滤掉源程序中的无用的部分,如注释

9、,空格,回车等。l 处理与具体平台有关的输入。l 识别记号,并交给语法分析器,根据模式识别记号。l 调用符号表管理器或出错管理器,进行相关管理。3) 工作方式l 单独一遍扫描。l 作为语法分析器的子程序。l 并行方式。4) 输入输出结果的分析(结合第一章9、10小点理解)l 源程序-词法分析期-记号流l 源程序-词法分析器-记号流-语法分析器-语法树。7. 输入缓冲区1) 设置缓冲区的必要性:l 超前搜索:为了得到某一个单词符号的确切性质,需要超前扫描若干个字符。l 方便实现读字符和退字符操作,提高词法分析器的效率。8. 字符串:从词法分析的角度看程序语言设计,他是由几号组成的集合(第二章第4

10、小点)1) 定义:语言L是有限字母表上有限长度字符串的集合。字母表是组成字符串的所有字符的集合。即字符串中的所有字符取自字母表。2) 两个有限:(有序集合):因为计算机所能表示的字符个数和字符串长度是有限的。l 字母表是有限的,即字母表中的元素是有限多个。l 字符串长度是有限的,即字符串中字符的个数是有限多个的。3) 字符串和集合的基本概念:(课本P19)9. 语言概述:(第一章第3、4小点理解)1) 语言形式化的内容提取:是字和组合字的规则l 语言:满足一定条件的句子集合。l 句子:满足一定规则的单词序列l 单词:满足已定规则的字符。(结合本章第5点理解)2) 程序设计语言形式化的内容提取:

11、组成程序的所有语句的集合。l 程序:满足语法规则的语句序列。l 语句:满足语法规则的单词序列。l 单词:满足词法规则的字符串。(结合本章第5点理解)3) 描述形式文法l 语法语句u 语句的组成规则u 描述方法:BNF范式,语法图l 词法单词(结合本章第5点理解)u 单词的组成规则。u 描述方法:BNF范式,正规式。(结合下一小点理解)10. 正规式和正规集1) 正规式:令是一个有限字母表,则上的正规式及其表示的集合递归定义为:l 是正规式,他表示集合L()=l 若a是上的字符,则a是正规式,他表示集合L(a)=al 若正规式r和s分别表示集合L(r)和L(s),则u r|s是正规式,表示集合L

12、(r)并L(s)。u rs是正规式,表示集合L(r)L(s)。u r*是正规式,表示集合L(r)*。u (r)是正规式,表示的集合仍是L(r)。(加括号改变优先级,结合性)2) 正规集:可用于正规式描述的语言称为正规语言或正规集。l 正规式计算的优先级(具有左结合的性质)u 从高到低排列:闭包运算,连接运算,或运算。l 正规式中不必要的括号可以被省略。3) 正规式和正规集之间的关系是多对一的关系。4) 正规式的等价:若正规式P和Q表示了同一个正规集,则称P和Q是等价的,即为P=Q5) 正规式公理(课本P21)11. 记号的说明(用正规式来描述)(本章第4小点):正规式可以严格规定记号的模式,用

13、正规式说明记号的公式为:1) 记号 = 正规式(记号是正规式)例如:id = a(a|b)可以读作“id定义为a(a|b)”(简称为正规式)2) 通常在不引起混淆的情况下,也把说明记号的公式简称为正规式,或者规则。12. 记号的识别有限自动机1) 模式的描述正规式2) 记号的识别有限自动机(确定,不确定)l 不确定的有限自动机u 定义:NFA是一个五元组:M = (S,move,s0,F)A. S是有限个状态的集合。B. 是有限个输入字符(包括)的集合。C. Move是一个状态转移函数,move(si ,ch)= sj表示,当前状态si下若遇到输入字符ch,则转移到状态sj。D. s0是唯一的

14、初态(称为开始状态)E. F是终态集,他是S的子集,包含了所有的终态。u NFA的表示方式A. 状态转换图:用一个有向图直观表示NFA。终态用一个双圈来表示。B. 状态转换矩阵:用一个二维数组来直观表示NFA。u NFA识别记号(课本P24-25 ,PPT29)A. NFA识别记号存在的问题:1. 只有尝试了全部可能的路径,才能确定一个输入序列不被接受,而这些路径的条数随着路径长度的增长而成指数增长。2. 识别过程中存在大量回溯,时间复杂度和输入序列呈指数级增长。l 确定的有限自动状态机(DFA)u 定义:DFA是NFA的一个特例A. 没有状态具有状态转移,即状态转换图中没有标记的边。B. 对

15、每一个状态s和每一个字符a,最多有一个下一个状态。u DFA的特征:消除了NFA的不确定性。A. 定义move(si,a)函数是一对一的。B. 转换图:从一个节点出发的边上标记均不相同。(没有重复字符的状态转移)C. 转换矩阵Msi,a是一个状态。(NFA可以为状态集)D. 字母表不包括。l 有限自动机的等价:若有限自动机M和M识别同意正规集,则成M和M是等价的,即为M=M。13. 简化正规式描述1) 正闭包:若r是表示L(r)的正规式,则r的正闭包是表示(L(r)的正闭包的正规式;l r+ = rr* = r*r,r* = r+|。+与*具有相同的运算结合性和优先级2) 可缺省:r? = r

16、|3) 字符组:l 枚举:【abc】 = a|b|cl 分段4) 非字符组:l 若r是一个字符组形式的正规式,则r是表示-L(r)的正规式。5) 串:若r是字符链运算的正规式,则串“r”和r等价。14. 从正规式到词法分析器1) 构造词法分析器的一般方法和步骤:l 用正规式对模式进行描述。l 为每一个正规式构造一个NFA,他识别正规式所表示的正规集。l 将构造出的NFA转化为等价的DFA,这一过程也成为确定化。l 优化DFA,使其状态数最少,这一过程称为最小化。l 从优化的DFA构造词法分析器。2) 从正规式到NFA(thompson算法)。l 对于字母表上的r,将其分解为最基本的正规式。u

17、对于,NFA为s0为初态,f为终态,该NFA接收。u 对于上的任意一个字符a,NFA为s0为初态,f为终态,NFA接受a。u 若正规式N(p)和N(q)是正规式p和q的NFA,则:(课本P27)。3) 从NFA到DFAl NFA标识记号的“并行”方法。避免回溯。u 由于并行的方法在每试探一步时,考虑了所有的下一步状态转移,因此走的每一步都是确定的。采用并行的方法,核心思想是将不确定的下一状态确定化。l 确定化的两个步骤:u 消除状态转移;的闭包。u 消除多余一个的下一个状态转移。l 算法(课本P30)4) DFA最小化(课本35)三、 第三章 语法分析1. 词法分析:元素是字母表,组成字符串,

18、线性结构,单词的集合。2. 语法分析:元素是终结符,组成句子,树结构(分析树),句子的集合。1) 语法规则:上下文无关文法(子集LL文法或LR文法)2) 语法分析:下推自动机(LL或LR分析器),自上而下(预测分析)和自下而上(移进归约)分析3. 语法错误的处理原则1) 源程序中可能出现的错误:l 词法错误:非法字符或拼写错误的关键字,标识符等。l 语法错误:语法结构错误,缺少分号等。l 静态语义错误:类型不一致,参数不匹配等。l 动态语义错误:逻辑错误,无穷递归,变量为0做处暑等等。2) 语法错误处理的目标l 清楚而准确的报告错误的出现。l 迅速的从每个错误中恢复过来。l 不应使对语法正确源

19、程序的分析速度降低太多。3) 语法错误的基本恢复策略l 紧急方式恢复:抛弃若干输入,直至遇到同步记号。l 短语级回复l 出错产生式l 全局纠正4. 上下文无关文法(CFG)1) 定义:CFG是一个四元组G = (N,T,P,S),其中:l N是非终结符的有限集合。l T是终结符的有限集合,且N交T为空集。l P是产生式的有限集合。u A-a,其中A属于N(左部),a属于(N并T)的闭包(右部),若a = ,则称A-为空的产生式l S是非终结符2) 由产生式集表示CFGl 前提:若文法正确,第一个产生式的左部是文法开始符号S,则N是出现在产生式左边符号的集合,T是所有不出现在产生式左边符号的集合

20、。3) 产生式的一般读法:读作“定义为”,或者“可导出”。4) 终结符与非终结符在读写上的区别。l 大写英文字母A、B、C表示非终结符。l 小写字母表示终结符。l 小写希腊字母表示任意文法符号序列。5) 产生式的缩写形式(产生式以非终结符命名)5. CFG产生语言的基本方法(PPT9):通过推导的方法产生语言 =1) 定义3.2(PPT10):直接推导。2) 强调的两点:推导具有自反性,推导具有传递性。3) 定义3.3(PPT10):由CFG G所产生的语言L(G)被定义为:l L(G) = S=+ and T* , l L(G)称为上下文无关语言(Context Free Language,

21、 CFL),称为句子。若S=*,(NT)*,则称为G的一个句型。 4) 定义3.4:在推导过程中,若每次直接推导均替换句型中最左边的非终结符,则称为最左推导,由最左推导产生的句型被称为左句型。 6. 推导,分析树,语法树。1) 分析树的性质(具体语法树):l 根由开始符号所标记。l 每个叶子都由一个终结符,非终结符,或标记。l 每个内部结点由一个非终结符标记。l 若A是某内部节点的标记,且X1,X2,.,Xn是该节点从左到右所有孩子的标记,则AX1X2.Xn是一个产生式。若A,则标记为A的结点可以仅有一个标记为的孩子。2) 分析树与语言和文法的关系:l 每一直接推导(每个产生式),对应一颗仅有

22、父子关系的子树,即产生式左部非终结符“长出”右部的孩子。l 分析树的叶子,从左到右构成G的一个句型。若叶子仅由终结标记,则构成一个句子。l 最左最右推导的中间过程对应的分析树可能不同,因为句型不同,但最终的分析树相同,因为最终是同一个句子。l 分析树既反映了产生句型的推导过程,有反映了句型的结构。3) 语法树(抽象语法树)l 定义3.6:对CFG G的句型,表达式的语法树被定义为具有下述性质的一棵树。u 根和内部节点由表达式中的操作符标记。u 叶子由表达式中的操作数标记。u 用于改变运算优先级和结合性的括弧,被隐含在语法树的结构中。7. 二义性和二义性的消除1) 二义性:若G对同一句子产生不止一颗分析树,则称G为二义的。(一个句子多于一颗分析树,与与文法和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论