当前位置: 首页 > news >正文

【期末速成】编译原理

第一章

编译程序和解释程序的区别

编译程序和解释程序的区别:编译程序产生目标代码(比如 C++ 产生 .exe 文件),解释程序不产生目标代码,比如 js 的 JIT 。

编译过程

在这里插入图片描述

第二章

在这里插入图片描述

上下文无关文法

在这里插入图片描述

推导、句型、句子、语言

推导是从文法的开始符号出发,按照产生式一步步替换,直到生成终结符串的过程。最左推导:每次都替换最左边的非终结符。

从开始符号出发,经过零次或多次推导所得到的、包含终结符和/或非终结符的符号串,叫做句型。句型可以是中间过程,不一定是最终的全终结符串。

如果一个句型中只包含终结符(即没有非终结符了),那么这个句型称为一个“句子”。

一个文法所能生成的所有句子的集合,称为这个文法的语言。

最左推导和最右推导

在这里插入图片描述

文法

这是编译原理中非常经典的两个题型:


产生式 → 推导语言(给出文法产生式,求语言)


✅【题型示例 1】

已知文法 G:

S → aS | b

问:该文法产生的语言是什么?


✅【解析思路】

分析每个推导路径:

  • S → aS → aaS → aaaS → … → aaab
    即:任意多个 a 开头,最后以 b 结尾。

✅【答案】

该文法生成的语言为:

L = { aⁿb | n ≥ 0 }

即:任意个 a 后跟一个 b


✅【题型示例 2】

已知文法:

S → aSa | bSb | ε

问:该文法描述的语言是?


✅【解析思路】

  • 这个文法是递归对称的,从两边同时加入 aa,或 bb
  • ε 为中间终止。

✅【答案】

这是一个回文语言

L = { w ∈ {a, b}* | w 是回文串 }

语言 → 构造文法产生式(反推文法)


✅【题型示例 3】

已知语言:

L = { aⁿbⁿ | n ≥ 1 }

问:构造文法 G,使 G 能生成 L。


✅【思路】

这个语言包含匹配数量的 a 和 b,可用递归文法表示。


✅【答案】

S → aSb | ab

推导示例:

  • S → ab
  • S → aSb → aab b
  • S → a aSb b → aaabbb

✅【题型示例 4】

语言:

L = { w ∈ {a, b}* | 每个 a 后面都跟着 b }

✅【构造思路】

我们需要生成满足规则:所有 a 后都必须被 b 跟随。

可以通过:

S → bS | a b S | ε

推导例:

  • ε
  • ab
  • abb
  • ababb

✅【题型示例 5】

语言:所有由偶数个 a 和偶数个 b 组成的字符串。


文法二义性

如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。也就是说,若一个文法中存在某个句子,它有两个不同的最左(最右)推导,则这个文法是二义的。

文法的二义性和语言的二义性是两个不同的概念。

文法分类(形式语言体系)

文法的分类

  • 0 型文法:无限制(左边至少一个大写字母)
  • 1 型文法:上下文有关(右边长度大于等于左边长度)
  • 2 型文法:上下文无关(左边只能有一个大写字母)
  • 3 型文法:正规文法(又分为左右线性)DFA、NFA

一个文法形成的语言是唯一的。

在这里插入图片描述

单词符号的五种分类

在这里插入图片描述

举例为:const a = 1;

语法分析树

给定文法 G:

E → E + T | T  
T → T * F | F  
F → (E) | id

输入串:id + id * id

  1. 最左推导过程(Leftmost Derivation):
  E ⇒ E + T⇒ T + T⇒ F + T⇒ id + T⇒ id + T * F⇒ id + F * F⇒ id + id * id
  1. 对应语法分析树:
             E/ | \E  +   T|     / | \T    T  *  F|    |     |F    F     id|    |id   id

第三章

在这里插入图片描述

状态转换图

在这里插入图片描述

DFA、NFA

在这里插入图片描述

正规式 => NFA:

在这里插入图片描述

在这里插入图片描述

NFA => DFA (子集法),以及 DFA 的最小化:

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

在这里插入图片描述

正规文法 -> 正规式

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

第四章

在这里插入图片描述

LL(1)分析条件

消除左递归:

在这里插入图片描述

在这里插入图片描述

如果出现没有左递归的情况,直接不用修改原封不动照抄一遍即可。

预测分析表的构造

first 集 和 follow 集

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

预测分析表构造

现根据 first 构造:

在这里插入图片描述

然后根据 follow 构造:

在这里插入图片描述

递归下降分析程序构造

不考。

第五章

规范规约

在这里插入图片描述

  • 素短语 = 不能再分的小短语(最小单位) = 由非终结符推导出来的、不可再拆的连续子串.
  • 句柄:最左直接短语
  • 直接短语:一个父节点只有一个子节点,且是叶子节点
  • 短语:所有子树的叶子短语集合

算符优先表

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • firstR,Qab里面的 a也算进去,然后 Q-cR | a 里面的 c和 a 也要算进去,然后因为 a 重复,所以只取一个。
  • Q 的 lastvt 是 a 和 b,因为 倒数第一个终结符,一个是 a,还有一个是R,但是 R是非终结符,所有看 Qab ,最后一个是 b,所以 a,b;然后加上 cR 中的 c,一共是 c a b
    在这里插入图片描述

在这里插入图片描述

第六章

在这里插入图片描述

翻译模式翻译句子

在这里插入图片描述

在这里插入图片描述

这道题技巧可以先看到具有三个 / ,而 / 只有 R-R/S 可以推出,所以先把三个 / 推出,其他的就比较轻松了。

第七章

表达式翻译为中间代码

  • 三地址代码(四元式)
  • 三元式
  • 间接三元式
  • 后缀式(逆波兰表达式)
  • 抽象语法树(AST)

将下面这个表达式:

x = (a + b) * (c - d) + e

翻译为以下形式:

  1. 三地址代码(四元式)
  2. 三元式
  3. 间接三元式
  4. 后缀式
  5. 抽象语法树(AST)

1️⃣ 三地址代码(四元式)

我们先进行中间变量拆分:

t1 = a + b
t2 = c - d
t3 = t1 * t2
t4 = t3 + e
x  = t4
编号运算参数1参数2结果
(1)+abt1
(2)-cdt2
(3)*t1t2t3
(4)+t3et4
(5):=t4-x

2️⃣ 三元式(编号表示中间结果)
编号运算参数1参数2
(0)+ab
(1)-cd
(2)*(0)(1)
(3)+(2)e
(4):=(3)x

3️⃣ 间接三元式

将三元式存储在数组中,通过地址引用执行:

地址表:
0: + a b
1: - c d
2: * 0 1
3: + 2 e
4: := 3 x

主程序中只保留地址列表 [0, 1, 2, 3, 4] 表示执行顺序。


4️⃣ 后缀式(逆波兰式)

后缀表达式的顺序为:

a b + c d - * e + x =

或写成两个阶段:

表达式部分:a b + c d - * e +  
赋值部分:x =

5️⃣ 抽象语法树(AST)
          =/   \x     +/ \*   e/ \+   -/ \ / \a  b c  d

相关文章:

  • 【期末笔记】高频电子线路
  • 从零开始手写redis(16)实现渐进式 rehash map
  • 云侧工程云函数开发
  • 测试工程师实战:用 LangChain+deepseek构建多轮对话测试辅助聊天机器人
  • Effective C++学习笔记
  • DeepSeek15-揭密模型上下文协议(MCP)
  • [学习] C语言<string.h>中字符串函数全解析
  • java专题漏洞总结 + 靶场练习
  • 开源 python 应用 开发(二)基于pyautogui、open cv 视觉识别的工具自动化
  • 关于程序的基本要素的详细讲解(从属GESP一级内容)
  • 端侧调用云存储实现头像存储
  • 查看shell选项状态命令详解
  • CentOS7.6 yum无法下载
  • 《HTTP权威指南》 第14章 安全HTTP
  • 小木的算法日记——合成两个有序链表
  • 系统思考:救火先放火
  • 优化通义大模型推理性能:企业级场景下的延迟与成本削减策略
  • 桌面小屏幕实战课程:DesktopScreen 3 Git工具使用
  • 21.安卓逆向2-frida hook技术-HookOkHttp的拦截器
  • 数智管理学(二十四)
  • 常用网站开发技术和工具/千锋教育学费
  • 怎样设计个人网站/推广联盟
  • 建网站工具/百度竞价排名展示方式
  • 网站开发的分工/百度信息流优化
  • 黑龙江省城乡和住房建设厅网站首页/中国女排联赛排名
  • 电子商务网站规划与设计/网络营销策划方案格式