西安电子科技大学考研复试编译原理复习

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

<4> 符号表的组织
1. 符号表的作用:连接声明与引用的桥梁 2. 符号表的条目与信息的存储:直接存储与间接存储 3. 作用域信息的保存 • 静态作用域+最近嵌套原则 • 线性表:栈结构,表上的操作 • 散列表:每个子表是栈结构,提高表上操作的效率
<5> 声明语句的翻译
1. 定义与声明:类型定义与变量声明,过程定义与过程声明 2. 变量声明:符号表信息的填写(简单变量和数组变量); 3. 过程声明: • 左值与右值; • 参数传递:参数传递的不同形式,各种参数传递形式的 处理方式; • 名字的作用域:满足静态作用域与最近嵌套原则; • 声明中作用域信息的保存。
关于考试
• 题目类型:填空题(30分)、简答题(20分)、计算题(50分) • 考试范围:1-4章讲过的内容 • 侧重考察:基本概念与基本方法的掌握
易犯的错误
1. 不认真审题(对题目的要求理解错误:意思理解错、难题 想容易、容易题想难。关键问题是基本概念不清楚) 2. 所答非所问(例如:没有要求LL分析却将文法改为LL的) 3. 画蛇添足(例如:仅问有无冲突却将分析表先构造出来) 4. 偷工减料(例如:有若干问,仅回答部分或问题仅答一半)
11.移进-归约分析表的构造:(算法3.10); 12.LR文法与LR分析:LR(0)、SLR(1)、LALR(1)、LR(1)。
17
第四章 语法制导翻译生成中间代码
讨论程序设计语言的静态语义分析,并且在语法分析的基 础上生成中间代码,采用的基本方法是语法制导翻译。 与前两章词法分析和语法分析不同的是,词法分析和语法 分析的讨论侧重于理论,而本章则侧重于结合程序设计语言的 实际例子讨论语言结构的具体翻译方法和一些实用的技术。
《编译原理》复习
西安电子科技大学 软件工程研究所
刘 坚
课程内容
一、引言 二、词法分析 三、语法分析 四、语义分析—语法制导翻译生成中间代码
要求(希望)
1. 牢固掌握基本概念 2. 灵活使用基本方法 3. 归纳总结所学内容 学习不能走捷径,付出多少劳动就有多少收获 掌握正确的学习方法,提高自学能力
2
<6> 可执行语句的翻译
1. 简单算术表达式和赋值句的翻译:语法制导翻译的设计, 类型转换; 2. 数组元素的引用: • 多维数组到一维存储空间的映射; • 数组元素地址计算的递推公式; • 数组元素地址计算的语法制导翻译; 3. 布尔表达式短路计算的翻译: • 为什么需要短路计算和短路计算的控制流; • 真出口与假出口; • 拉链/回填技术:真值链与假值链 4. 控制语句的翻译:控制语句的分类,转移与条件转移。
9. 拓广文法与子集法构造DFA • closure(I)、goto(I,X)(定义3.18、3.19 ) • 核心项目与非核心项目(定义3.20) • 构造算法(算法3.9)核心是:closure(goto(I,x))
<4> 自下而上分析(续2) 10.DFA如何分析输入序列 • 有效项目(定义3.21)、可移进项目、可规约项目 • 移进/归约冲突、归约/归约冲突; • 解决冲突的方法-SLR(1):简单向前看一个终结符(计 算归约项非终结符的FOLLOW,与可移进终结符比较);
<4> 自下而上分析(续1) 6. 移进-归约分析表:动作表(action)和转移表(goto) 7. LR(k)文法(定义3.15) 8. 核心:识别活前缀的DFA:活前缀与LR(0)项目(NFA状态) (定义3.16、3.17 )
• •
一个产生式是一个识别活前缀的NFA 一个LR(0)项目是NFA的一个状态
第一章 引言
<1> 语言的翻译
不同的翻译形式:汇编、编译、转换(预编译)、逆向翻译 翻译方法:
编译器 源程序 目标程序 输出
输入数据
目标程序
3
<2> 编译器的基本组成
4
<3> 编译器的分析-综合模式
编译器
分析(前端) 源程序 语法/语义分析 中间代码
综合(后端) 目标代码 代码生成/优化
<4> 编译器的扫描遍数与编译器的编写
13
<3> 自上而下分析(续) 4. 预测分析表方法: • 工作方式与过程:PDA(DPDA) • 格局:(栈内容,当前剩余输入,改变格局的动作) • 改变格局的动作:匹配终结符、展开非终结符、接 受、报错 • 驱动器(算法3.4) • 预测分析表和分析表的构造: 分析表的构成与意思:M[A, a] FIRST集合与FOLLOW集合(定义3.10、3.11) FIRST与FOLLOW的计算(算法3.5、3.6) 分析表的构造(算法3.7) • LL(1)文法及其判别:预测分析表中没有多重定义条目 (定义3.12、推论3.2)。
11
<2> 有关推导的基本概念
1. CFG产生语言的基本方法-推导:从文法的开始符号开始, 反复地用产生式的右部替换句型中的非终结符。 2. 推导的基本概念:句子、直接推导、最左推导、左句型(最 右推导、右句型);(定义3.2、3.3、3.4) 3. 分析树与语法树:分析树和语法树都反映了语言结构;分析 树还记录了分析的过程(含有非终结符);(定义3.5、3.6) 4. 文法的二义性:二义性的本质是在文法中缺少对文法符号优 先级和结合性的限制,从而使得一个句子可以推导出多于一 棵分析树。(定义3.7) 5. 二义性的消除: • 改写二义文法为非二义文法;(两个关键步骤) • 对文法符号施加优先级与结合性的限制,使得分析的每 一步有唯一选择。 12
<2> 基本设计方法
1. 与语法分析的关系:自下而上语法分析(LR分析的两点扩 充),自上而下语法分析(递归下降子程序方法) 2. 语义规则的设计:设计属性、基本操作(函数或过程)、 语义规则; 3. 声明性语句:需要保存什么信息,这些信息有哪些特征, 设计什么样的数据结构存放这些信息,以便于对它们的处 理; 4. 可执行语句:语句的结构应生成什么样的中间代码序列, 根据中间代码序列设计语法制导定义,根据序列的特点设 计翻译方案。
5
第二章 词法分析
词法分析器的作用: • 滤掉源程序中的无用成分; • 处理与具体操作系统或机器有关的输入; • 识别记号并交给语法分析器; • 调用符号表管理器和出错处理器进行相关处理。 构词规则与词法分析: 首先规定单词形成的规则,称为构词规则;然后根据 构词规则识别输入序列,称为词法分析。 主要内容: <1> 记号、模式与单词 <2> 记号的说明-模式的形式化描述(正规式与正规集) <3> 记号的识别-有限自动机 <4> 从正规式到词法分析器
第三章 语法分析
语法分析是编译器中的重要阶段之一,可以认为是语法制 导翻译模式编译器的核心。语法分析也有双重含义:根据一定 的规则构成语言的各种结构,即语法规则;根据语法规则识别 输入序列(记号流)中的语言结构,即语法分析。 语法分析的分析对象是组成语言的句子,句子具有层次结 构的特征,表征该结构的最好方法是树,从而使得对语法的分 析就有了从根到叶子和从叶子到根两种分析方法。
<3> 中间代码
1. 为什么生成中间代码:中间代码是编译器分析综合模式 前端与后端的分水岭; 2. 中间代码的特征:形式接近目标机器代码,但又与具体 机器无关,便于编译器的开发移植和代码的优化; 3. 常用的中间代码形式:后缀式、树(图)、三地址码; 4. 三地址码的实现:三元式、四元式 5. 中间代码之间的关系: • 树与后缀式的关系 • 树与三元式和四元式的关系
主要内容
<1> <2> <3> <4> <5> 语法制导翻译:概念与基本方法 中间代码 符号表的组织 声明语句的翻译 可执行语句的翻译
18
<1> 语法制导翻译的基本概念
1. 语法与语义 • 语法:语言的结构;语义:附在结构上的实际意思 2. 属性与属性的计算 • 属性:附在文法符号上的意思,如:val、place等 • 语义规则:实现属性的计算 3. 语义规则的两种表现形式 • 语法制导定义:抽象的属性和计算表示的语义规则 • 翻译方案:具体的属性和计算表示的语义规则
<4> 自下而上分析
1. 分析方法:归约(推导的逆过程),从叶子到根构造分析树; 2. 基本概念: • 短语、直接短语、句柄(定义3.13) • 最左归约(定义3.14)、归约、规范归约 3. 采用的方法: • 剪句柄 • 实现方法:移进-归约(格局中的两个关键动作) 4. 关键问题:是如何确定栈顶已经形成句柄,当句柄形成时, 如何判定采用哪个产生式进行规约; 5. 移进-归约分析器的工作模式(与预测分析表方法对着看) 移进(匹配终结符) 归约(展开非终结符) 驱动器(算法3.8) 15
7
<3> 记号的识别-有限自动机(FA)
• NFA与DFA的定义:FA = (S, Σ, move, s0, F); • NFA与DFA的表示:定义表示、状态转换图、状态转换矩阵; • NFA与DFA的关键区别:NFA的不确定性: 有ε状态转移; 当前状态下,对同一字符有多于一个的下一状态转移; • 用NFA识别输入序列的弱点:尝试所有路径才能确定一个输 入不被接收、回溯带来的问题; • 模拟DFA的算法(算法2.1 ):用DFA识别记号。
6
<1> 记号、模式与单词
• • • • 模式(pattern):规定单词识别的规则 记号(token):按照某模式识别出的一类单词(记号种类) 单词(lexeme):被识别出的字符串本身 词法分析器的输出:记号=记号种类+记号属性
<2> 记号的说明-模式的形式化描述
1. 正规式与正规集 • 正规式与正规集的定义(基本正规式、三个运算) • 正规式的等价(描述相同的集合) • 利用正规式的等价对正规式进行化简(正规式的代数性质) 2. 用正规式形式化描述模式 • 如何用正规式描述程序设计语言中常见的记号,如标识 符、数字、运算符和分隔符等 • 正规式的简化形式以及辅助定义与规则
8
<4> 从正规式到词法分析器
• 构造NFA的Thompson算法(算法2.2):与正规式的对应关系; • 模拟NFA的“并行”算法(算法2.3); • 从NFA构造DFA-子集法(算法2.5): smove(S, a)与ε-闭包(T)的计算; • DFA的最小化-可区分的概念:所有不可区分的状态看作是 一个状态(算法2.6); • 灵活运用各种方法构造DFA(正规式化简、状态转换图等), 特别是手工构造和算法构造的区别(考虑(a|b)*abb的NFA)。
<3> 自上而下分析
1. 分析方法:推导,从上到下构造分析树,是一种预测的、 试探的方法; 2. 对文法的要求:没有公共左因子和左递归 • 左递归与直接左递归(定义3.9) • 消除直接左递归与左递归(算法3.1、3.2) • 提取公共左因子(类似于提取公因式) 3. 递归下降子程序方法:匹配终结符,展开非终结符(子 程序调用)
结 束(2010年5月25日)
试题与习题
• 认真复习,重点是掌握基本概念。基本概念掌握了,相当 一部分试题的解就有了。 • 习题与试题的目的区别:习题的目的是通过反复的练习理 解、掌握所学知识,会有不少繁、难、大量步骤的题;试 题的目的是考察对本课程综合掌握的情况,特点是短时间 内覆盖大量内容。太繁琐步骤或太难等需要耗费大量时间 的题是不可能出的,大部分应该是基本概念题,但也会有 一些综合性的题目。 • 自己要会辨别什么是主要的什么是次要的,抓什么丢什么。 “基本概念要严谨(清楚),基本方法要灵活”。 • 总之一句话,学习方法的掌握是个人努力的结果,单纯靠 别人教是学不会的。
主要内容
<1> <2> <3> <4> 程序设计语言与文法 有关推导的基本概念 自上而下分析 自下而上分析
10ቤተ መጻሕፍቲ ባይዱ
<1> 程序设计语言与文法
正规式与正规文法:正规式与正规文法用于描述线性结构, 如构成句子的记号(终结符);识别正规语言的自动机是有 限自动机,它们的特征是没有记忆能力; • 上下文无关文法(CFG=(N, T, S, P)):CFG用于描述层次结 构,如构成程序的句子;识别CFL的自动机是下推自动机, 它是在有限自动机的基础上增加了一个下推栈,从而有了 简单的记忆能力; • 文法的分类:0型、1型、2 型和3型文法 • 词法分析器与语法分析器: FA与PDA •
相关文档
最新文档