编译原理--01 文法和语言、词法分析复习(清华大学出版社第3版)
前言
这篇博客系列是我为了应付期末编译原理的考试顺便做的复习总结,不适合用于直接学习,而是用于快速过一遍考点。不过现在考试已经结束了,做了不到半个钟就做完卷子了。到头来考的深度也只有里面的一半左右= =不过至少是考点全覆盖了23333
最后考了95分嘿嘿,甚至还有考100的
目录 |
---|
01 文法和语言、词法分析复习 |
02 自顶向下、自底向上的LR分析复习 |
03 语法制导翻译和中间代码生成复习 |
04 符号表、运行时存储组织和代码优化复习 |
05 用C++手撕PL/0 |
第2章 文法和语言
符号和符号串
空符号串用表示,长度为0
若 ,则 ,称 为集合 的闭包;,称为集合的正闭包。
文法和语言的形式定义
规则或产生式或生成式,表示为 或
文法 定义为四元组
为非终结符集合
为终结符集合
为规则集
为识别符或开始符
例如:
直接推导用 ,如
长度为的推导用 ,如
长度为的推导用 ,如
句型:对,称x是文法G[S]的句型。x可以包含非终结符
句子:若上述x仅由终结符构成,则x是文法G[S]的句子
文法描述的语言 是 该文法一切句子的集合,如:
文法类型
文法类型 | 每个产生式的特点 |
---|---|
0型文法 | 且至少含一个非终结符,且 |
1型 或 上下文有关文法 | 在0型文法的基础上,还满足,仅除外 |
2型 或 上下文无关文法 | 是一个非终结符, |
3型 或 正规文法 | 满足或(右线性文法)的形式,即中只有1个非终结符,以及0或1个终结符。左线性文法为或型 |
最左推导:在推导中,对中最左非终结符进行替换
最右推导:又称作规范推导,所推导得到的句型称为右句型,或规范句型
二义性:一个文法存在某个句子对应两棵不同的语法树
语法树
已知文法
文法G的句型aabbaa的一颗推导树为:
短语:若 且,则称 为句型 相对于非终结符的短语
直接短语:特别的,若,则称 为句型 相对于规则的直接短语
句柄:规范句型(右句型)的直接短语。对于无二义文法,一个右句型的唯一句柄是其所有直接短语中最左边的那一个
短语即找出所有非终结符为根节点构成的子树的叶子节点,故有
直接短语即找出所有非终结符为根节点构成的只有两层高度子树的叶子节点,故有
句柄要求使用最右推导,对上面的推导树来看有,我们需要看的是最后一次推导,这里使用的是,因此其句柄为:。
可见,短语、直接短语、句柄的存在要求语法树至少含有2级的叶结点(或3层高度)。
文法限制
有害规则:如,只会引发二义性
多余规则:非终结符D不在任何规则的右部出现,即不可到达的
这一章的可能考点
- 已知文法求语言
- 已知语言求文法
- 列出句型的短语、直接短语、句柄
- 语法树、最左推导、规范推导
第3章 词法分析
正规式
----正规式---- | 含义 |
---|---|
仅a | |
该字符可以为a或b | |
字符a后面紧跟b | |
n(n>=0)个连续的a | |
ab或bb |
正规文法与正规式的等价性
正规式转化为正规文法
对型正规产生式,重写为:
对型正规产生式,重写为:
正规文法转化为正规式
文法产生式 | ----正规式---- | |
---|---|---|
规则1 | 和 | |
规则2 | ||
规则3 | 和 |
有穷自动机
确定的有穷自动机(DFA)
确定的有穷自动机是一个五元组:
是一个有穷状态集
是一个输入符号表
是状态转换函数,例如
,是唯一的一个初态
,是一个终态集
DFA的确定性表现在转换函数 是一个单值函数
例如: DFA
现验证是否为所接受,因为:
,而属于终态,故可为接受。
不确定的有穷自动机(NFA)
不确定的有穷自动机是一个五元组:
是一个有穷状态集
是一个输入符号表
是的多值映像,即允许函数值有多种结果
,是非空初态集
,是一个终态集
NFA可以使用空转移,但DFA不可以。例如:
NFA转换为等价DFA
状态集合的闭包,表示为,是状态集中的任何状态经过任意条弧能到达的状态的集合。显然,状态集合的任何状态都属于
状态集合的弧转换,表示为,定义为状态集合J,其中J是所有那些可以从中某一状态经过一条弧而到达的状态全体
子集法
----------初始状态集---------- | ----a---- | ----b---- | |
---|---|---|---|
重命名状态集 | a | b |
---|---|---|
![]() |
DFA的最小化
- 将划分为终态集与非终态集,得
- 递归地分割中的子集,使得被分割的子集中的所有状态都能够根据不同的输入符号转换到被分割的目标子集中的所有状态
- 直到不可再被分割后,将中的每个子集合并为一个状态。含原初态的状态为初态,而含原终态的状态为终态。
被划分为
在非终态集中,在1和2构成集合时,通过a可以到达终态集,通过b可以到达3。而3,4通过b到达的是终态集,显然有区别,故划分为
在6和7构成集合时,通过a可以到达4,通过b可以到达集合{1,2},而5通过a到达的是7,显然有区别,故划分为
由于3通过a到达集合{1,2},而4通过a到达4,有明显区分,故划分为
最后不能再划分了,因此令1代表{1,2},消去2,令6代表{6,7},消去7.最终得到的为最小化的DFA
正规式和有穷自动机的等价性
略
正规文法和有穷自动机的等价性
略
这一章的可能考点
- 根据文法构造DFA,或给定NFA转DFA
- DFA的最小化
- 正规文法、正规式、有穷自动机之间的转换
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律