编译原理:期末总复习

本文深入探讨了编译程序的结构与过程,包括词法分析的任务、语法分析的类型以及文法的形式定义。重点介绍了上下文无关文法、正规式和有穷自动机的概念,同时讲解了自顶向下和自底向上的语法分析方法,如LL(1)和算符优先分析。此外,还涉及了文法的实际应用限制和转换技巧。
摘要由CSDN通过智能技术生成


🔍文中如有不对,欢迎讨论

第1章:引论

1.1 什么是编译程序

一个编译程序就是一个语言翻译程序

判断题:编译程序就是解释程序 (❌)

编译程序与解释程序的异同
相同点:都是进行翻译
不同点:
编译程序进行整体翻译
解释程序进行逐条翻译

1.2 编译过程和编译程序的结构

1.2.1 编译过程概述

在这里插入图片描述
1.词法分析
任务:从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词。

2.语法分析
任务:在词法分析的基础上将单词序列分解成各类语法短语

1.2.2 编译程序的结构

在这里插入图片描述

❌出错处理主要的三个错误
词法错误
语法错误
语义错误

表格管理程序
负责收集记录查询编译当中所缺的信息,像常量表、符号表、数组信息表。

1.2.3 编译阶段的组合

有时把编译的过程分为前端后端

阶段
前端词法分析、语法分析、语义分析、中间代码生成阶段
后端目标代码生成、相关出错处理、符号表操作

第2章:文法和语言

2.2 符号和字符串

🟩选择题、填空题
1)符号串的头尾,固有头和固有尾
如果z=xy是一符号串,那么x是z的头,y是z的尾,如果x是非空的,那么y是固有尾,如果y是非空的,那么x是固有头

2)符号串的连接:设x和y是字符串,它们的连接xy是把y的符号写在x的符号之后得到的符号串
如:X=ST,y=abu,则xy=STabu

3)符号串的方幂
设x是符号串,把x自身连接n次得到符号串z,即z=xx…xx,称为符号串x的方幂

4)符号串集合
若集合A中的一切元素都是以某字母表上的符号串,则称A为该字母表上的符号串集合。形成语言或正规式的形式


2.3 文法和语言的形式定义

🟢必考点 名词解释:1.文法的概念
文法G定义为四元组(VN,VT,P,S)

🟢2.直接推导、推导的定义
直接推导: 从字符串A到B只使用了一次规则,A=>B即直接推导
推导: 存在一个直接推导序列,即A=>B=>C=>D=>…=>Z,则A=>+Z表示从A出发,经过1步或若干步直接推导可推出Z。

🟢3.句型、句子的定义
句型: G[S]是一个文法,如果符号串x是从识别符号推导出来的,即S=>x,则称x是文法G[S]的句型。
句子: 若x仅由终结符号组成,则成为G[S]的句子

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

5.文法的等价性
观察两个文法所描述的语言是否相同
若L(G1)=L(G2),则称文法G1和G2等价


2.4文法的类型

🟨选择题:如0型文法又叫什么文法?
0型文法,也称短语文法

设G为一个文法,如果它的每个产生式a->b,满足a、b是非终结符VN和终结符VT的闭包集合(包含空串),且a中至少有一个非终结符,则称G是一个0型文法

做限制条件:
1.使产生式右边长度大于等于左边,除了空字外
得到1型文法,又叫上下文有关的

2.a是一个非终结符
得到2型文法,又叫上下文无关的

3.产生式的形式都是A->aB或A->a,其中A,B都是非终结符
得到3型文法,又叫正规文法


2.5 上下文无关文法及语法树

🌲语法树: 描述上下文无关文法(2型文法)的句型推导的直观工具,也叫推导树

🎈最左(右)推导:在推导任何一步a=>b,其中a,b是句型,都是对a中的最左(右)非终结符进行替换
注:
最右推导常被称为规范推导
规范推导的逆过程,称为最左归约,也称为规范归约

💊二义性:一个文法存在某个句子对应两颗不同的语法树,或者说,一个文法中存在某个句子,它有两个不同的最左(右)推导


2.6 句型的分析

2.6.1 自顶向下的分析方法(推导过程)

如:
LL(1)分析法
递归下降分析法

2.6.2 自底向上的分析方法(规约过程)

简单优先分析法
算符优先分析法
优先函数
LR分析法


2.6.3 句型分析的有关问题

回溯:从各种可能的选择随机挑选一种,如果发现它是错误的,必须退回去重新选择

🟢必考点(名词解释或综合题):短语、直接短语、句柄
名词解释

在这里插入图片描述
综合题案例
在这里插入图片描述
(1)串abbaa最左推导:
S=>ABS=>aBS=>aSBBS=>aBBS=>abBS=>abbS=>abbAa=>abbaa
最右推导:
S=>ABS=>ABAa=>ABaa=>ASBBaa=>ASBbaa=>ASbbaa=>Abbaa=>abbaa
(2)产生式有:
S→ABS|Aa|ε
A→a
B→SBB|b
可能元素有:εaa ab abbaa aaabbaa……
(3)该句子的短语有:
a是相对A的短语
b是相对B的短语
bb是相对B的短语
aa是相对S的短语
abbaa是相对S的短语
直接短语有:a b
句柄是:a


2.7 有关文法实际应用的一些说明

2.7.1 有关文法的实用限制

❌有害规则:是指像U->U这种没有必要的产生式,因为这会引起文法的二义性所以有害
❗多余规则:指文法中那些连一个句子的推导都用不到的规则,以两种形式出现:不可到达的、不可终止的


练习
在这里插入图片描述
在这里插入图片描述


第3章 词法分析

3.1.2 词法分析程序的输出

单词符号可分为以下5类
1)关键字
2)标识符
3)常数
4)运算符
5)界符
词法分析所输出的单词符号可以采用以下二元式表示
(单词种别,单词自身的值)


3.3 单词的形式化描述工具

3.3.2 正规式

正规式正规集的等价变换
在这里插入图片描述
正规式代数规律在这里插入图片描述

3.3.3 正规文法和正规式的等价性

1.将正规式转换成正规文法
在这里插入图片描述
2.将正规文法转换成正规式
在这里插入图片描述


3.4 有穷自动机

3.4.1 确定的有穷自动机(DFA)

一个确定的有穷自动机M是一个五元组:
在这里插入图片描述
三种表示形式:定义表示、状态图表示、矩阵表示

3.4.2 不确定的有穷自动机(NFA)

一个不确定的有穷自动机M是一个五元组
在这里插入图片描述


3.4.3 NFA转换为等价的DFA(确定化)

子集法

3.4.4 确定的有穷自动机的化简(最小化)

分割法
通过消除无用状态和合并等价状态

练习:
正规式->DFA
在这里插入图片描述
1)先构造NFA
在这里插入图片描述
2)确定化
在这里插入图片描述
3)最小化
在这里插入图片描述
2.正规文法->DFA
给出右线性文法:
S -> 0S | 1S | 1A | 0B
A -> 1C | 1
B -> 0C | 0
C -> 0C | 1C | 0 | 1

1)构造NFA
在这里插入图片描述
2)确定化
在这里插入图片描述
3)最小化
在这里插入图片描述


第4章 自顶向下语法分析方法

4.2 确定的自顶向下分析思想

简单讲就是
First集:第一个终结符号
Follow集:后面紧跟的终结符号

🟢LL(1)的含义
L:从左向右扫描输入串
L:最左推导
1:只需向后看一个符号便可决定如何推导


LL(1)文法的判别

过程:
1)求出能推出空字的非终结符
2)计算First集
3)计算Follow集
4)计算select集


4.3 某些非LL(1)文法到LL(1)文法的等价变换

🟨判断题

1.所有非LL(1)文法都可以到LL(1)文法转换(❌)
2.左公共因子和左递归都可以消除(❌)

LL(1)文法的充要条件
1)没有左公共因子
2)没有左递归
3)select交集为空

左公共因子
1)隐式
2)显示

左递归
1)直接
2)间接

4.3.1 提取左公共因子

在这里插入图片描述

4.3.2 消除左递归

综合案例

在这里插入图片描述
构造过程
1.判断文法是否为LL(1)文法在这里插入图片描述
在这里插入图片描述
2.构造预测分析表
在这里插入图片描述
3.分析过程
在这里插入图片描述
练习:
在这里插入图片描述
参考答案:https://www.docin.com/p-696386725.html


第5章 自底向上优先分析

1)简单优先
2)算符优先

5.2 简单优先分析法

5.2.1 优先关系定义

在这里插入图片描述
🟨判断题

若X的优先级大于Y,则可以推出Y的优先级小于X (❌)


5.3 算符优先分析

算符优先分析只考虑终结符

🟢名词解释:OG、OPG
OG:算符文法
OPG:算符优先文法

OG:算符文法
1.任何句型都不包含两个相邻的非终结符
2.如果如果Ab出现在算符文法的句型r中,其中A属于非终结符,b属于终结符,则r中任何含此b的短语必含有A

OPG:算符优先文法
1.在算符文法中任何句型都不包含两个相邻的非终结符
2.不能出现空产生式
3.终结符之间最多只有一种优先关系


5.3.3 算符优先关系表的构造

1)求出等于大于小于关系
2)求FIRSTVT(小于关系)、LASTVT集合(大于关系)

🟩综合题:按照书上5.3步骤写
例题5.3
在这里插入图片描述


5.3.4 算符优先算法

🟢名词解释:最左素短语
最左素短语:设有文法G[S],其句型的素短语是一个短语,它至少包含一个终结符,并除自身外不包含其他素短语,最左边的素短语称最左素短语


第6章 LR分析

6.2 LR(0)分析

6.2.4 LR(0)项目集规范族的构造

重点:p130-137

《编译》——复习资料,可适用于课程学习资料、期末复习资料、自主学习资料等等,复习资料共218页,内容丰富,干货十足! 主要内容包括: 一、概述 1 1.1 课程介绍 1 1.2 编译过程 3 1.3 高级语言程序简介 11 二、程序语言概论 14 2.1 程序语言的定义 14 2.2 文法的形式化定义和分类 18 2.3 文法和语言 22 2.4 语法分析树 29 三、词法分析_1 33 3.1 词法分析概述 33 3.2 词法分析程序的设计 38 3.3 正规式与自动机 41 3.3.1 正规式与正规集 41 3.3.2 确定有限自动机(DFA) 44 3.3.3 非确定有限自动机(NFA) 49 3.4 单元测试 51 四、词汇分析_2 52 4.1正则式和有限自动机的等价 52 五、词法分析_3 59 5.1 DFA的化简 59 六、词法分析_4 62 6.1 词法分析器的自动生成 62 6.2 词法分析程序实现实例 64 七、语法分析—自上而下分析_1 71 7.1 词法分析简介 71 7.2 自顶向下分析简介 73 7.3 消除左递归和回溯 76 八、语法分析—自上而下分析_2 80 8.1 LL(1)分析法 80 8.2 FIRST集和FOLLOW集的构造 82 8.3 单元测试 85 九、语法分析—自上而下分析_3 86 9.1 LL(1)分析表的构造 86 9.2 递归子程序的原理 89 9.3 单元测试 95 十、语法分析—自下而上分析_1 96 10.1 自下而上分析方法的基本思想 96 10.2 分析树与规范规约 99 10.3 符号栈的使用 103 10.4 单元测试 105 十一、语法分析—自下而上分析_2 106 11.1 算符优先文法 106 11.2 优先表构造 109 11.3 算符优先分析算法 112 10.4 单元测试 115 十二、语法分析—自下而上分析_3 116 12.1 LR分析器 116 12.2 LR分析过程 119 12.3 单元测试 132 十三、语法分析—自下而上分析_4 133 13.1 构造识别前缀的DFA 133 13.2 LR(0)项目集规范族构造 140 13.3 由DFA构造LR(0)分析表 146 13.4 单元测试 150 十六、属性文法和语法翻译制导 151 16.1 L-属性文法和自顶向下翻译 151 16.2 自下而上计算继承属性 159 十七、语义分析和中间代码产生_1 166 17.1 语义分析的任务 166 17.2 中间代码的生成 168 17.3 算术表达式和赋值语句 175 17.4 单元测试 178 十八、语义分析和中间代码产生_2 179 18.1 布尔表达式的作用和文法描述 179 18.2 做控制用布尔表达式的翻译(回填) 181 18.3 控制流语句的翻译 186 18.4 控制流语句的翻译(回填) 189 十九、代码优化_1 194 19.1 什么是代码优化 194 19.2 基本块及流图 199 19.3 单元测试 202 二十、代码优化_2 203 20.1 基本块的DAG表示及其作用 203 二十一、重要知识点 213 1. 考试内容及分数分布 213 2. 名词解释 214 3. 简答题 215 4. 结语 216
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值