编译原理期末速成笔记

news2024/10/6 1:39:44

哈喽大家好,又要考试了,在这里分享一下我的两天速成笔记,参考视频为哔站 Deeplei_ 的《编译原理期末速成》。本文仅是知识点总结,至于考试内容待我研究一下,后续我会再发文对考试的各个模块做详细分析,欢迎评论区留言!

目录

1. 求表达式的四元式

2. 求表达式的逆波兰式

3. 根据文法写出语言

4. 分析句型构造语法树

5. 求短语、直接短语和句柄

6. 正规式转正规文法

7. 正规文法转正规式

8. 正规式转 NFA

9. NFA 确定化及 DFA 最小化

10. 消除左公因子和左递归

11. 求 First 集、Follow 集和 Select 集

12. 构造 LL(1) 预测分析表

13.构造 LR(0) 项目集规范族

14. 构造 LR(0) 和 SLR(1) 分析表


1. 求表达式的四元式

四元式格式:(运算符,运算对象1,运算对象2,临时变量)

规则:

① 先处理优先级高的一部分,然后向左遍历;

② 每一次运算结果用一个变量接收,以便后续使用。

写出 a + b * ( c / d + g ) 的四元表达式。

(/,c,d,t1)

(+,t1,g,t2)

(*,b,t2,t3)

(+,a,t3,t4)

2. 求表达式的逆波兰式

先在草稿上画一个栈,读取符号时进栈,出栈时出栈的符号追加到答案后面,读取完毕后栈中的符号要依次出栈。

规则:

① 从左到右读取表达式;

② 遇到字母直接写到答案中;

③ 遇到符号,加入栈中;

④ 遇到成对括号,才出栈;

⑤ 新加入的符号优先级要高于原栈顶优先级,否则栈中符号先出栈。

写出 a + b * ( c / d + g ) 的逆波兰式。

逆波兰式:abcd/g+*+

3. 根据文法写出语言

句子是句型的特殊情况,句子的集合叫语言。

① N → D|ND

② D → 0|1|2|3|4|5|6|7|8|9

问 G[N] 的语言是什么?

 

4. 分析句型构造语法树

根据推到过程按顺序画出语法树。

令文法 G[E] 为:

E → E + T|T

T → T * F|F

F → (E)|v|d

(1)分析说明 v * v + d 是它的一个句型。

(2)画出上一问的语法树。

5. 求短语、直接短语和句柄

还是以上面的题为例,根据画出的语法树求短语、直接短语和句柄。

求短语,找出所有的父节点,从最后一层开始往上看,把父节点的叶子进行组合,在同一层上从左到右看,同一个叶子不用重复写。

短语:v,v,v * v,d,v * v + d 。

直接短语是短语的特殊情况,首先找出只有一层的简单子树,一个父节点加上它的子节点,该子节点以下再无结点,一般都在末层去找,简单子树的短语就是直接短语。

直接短语:v,v,d 。

写出的直接短语中最左边的那个短语就叫句柄。

句柄:v 。

6. 正规式转正规文法

套用公式进行改写:

① 已知 A → x|y,改写为 A → x,A → y;

② 已知 A → xy,改写为 A → xB,B → y;

③ 已知 A → x*y,改写为 A → xB,A → y,B → xB,B → y。

将正规式 r = a(a|d)* 转换为相应的正规文法 G[S]。

设开始符号为 S,则 S → a(a|d)*

7. 正规文法转正规式

公式实际上就是正规式转正规文法逆过来:

① 已知 A → x,A → y,推出正规式 A = x|y;

② 已知 A → xB,B → y,推出正规式 A = xy;

③ 已知 A → xA|y,推出正规式 A = x*y。

文法G[S]:

S → aA

S → a

A → aA

A → dA

A → a

A → d

将以上文法转为正规式。

8. 正规式转 NFA

先从外往里看,里面暂时看成整体,根据以下规则画出 NFA。

正规式 (a|b)* 的NFA如下:

 正规式 (a*|b*)* 的NFA如下:

9. NFA 确定化及 DFA 最小化

以正规式 (a|b)* 为例,其 NFA 如下:

 NFA的确定化即 DFA:

DFA 最小化:

含有终态状态的集合称为终态集,除此之外都是初态集,本例中的终态状态为 Z。

10. 消除左公因子和左递归

规则如下:

 已知文法 G[E]:

E → ad | Bc

B → aE | eB

提取左公共因子,给出修改后的等价文法。

11. 求 First 集、Follow 集和 Select 集

求 First 集规则如下:

(1)A → aB(A → ab),First(A) = {a}

(2)A → aB | 空串,First(A) = {a, 空串}

(3)A → BCD,First(A) = {First(B)}

(4)A → BCD,B → 空串,First(A) = {First(B), First(C)}

(5)A → BCD,B → 空串,C → 空串,First(A) = {First(B), First(C), First(D)}

(6)终结符的 First 集就是它本身,First(a) = {a}

求 Follow 集规则如下:

(1)若要求的是开始符号的 Follow 集,则集合中必有 #,Follow(S) = {#, ...}

(2)A → aBb,Follow(B) = {First(b)} - 空串

(3)A → aB,Follow(B) = {Follow(A)}

求 Select 集规则如下:

(1)若 a 可经过 n 步推出空串,则 Select(A → a) = [First(a) - 空串] U Follow(A)

(2)若 a 不是空串,则 Select(A → a) = First(a)

还以上一题为例:

当左部相同的产生式的 Select 集的交集都是空集时,就可证明该文法是 LL(1) 文法。

12. 构造 LL(1) 预测分析表

构造过程:

① 横向表头处沿 x 轴方向,按给出的右部文法顺序,依次填入终结符,包括 #;

② 纵向表头处沿 y 轴方向,按给出的左部文法顺序,依次填入非终结符;

③ 表格内容填入产生式,所在表格的横坐标为该产生式的左部,所在表格的纵坐标是该产生式 Select 集的一个元素;

④ 构造表格时先把 Select 集全写出来;

⑤ 不满足填入产生式的条件时,就什么都不用填。

依然接着上面的例子:

13.构造 LR(0) 项目集规范族

项目的概念:

① 右部标有小圆点的产生式称为一个项目;

② 若小圆点后面是一个终结符,它就被称为移进项目;

③ 若小圆点后面是一个非终结符,它就被称为待约项目;

④ 若小圆点放在了最后面,则称该项目为归约项目。

增广文法的概念用文字不好描述,我们直接看例子:

 

 

 

把 LR(0) 自动机方框中的内容分别写到项目集合中就是规范族。

14. 构造 LR(0) 和 SLR(1) 分析表

分析表的结构:

① Action 栏表头填终结符和 # 号,GOTO 栏表头填入非终结符,不包括增广文法时引入的 S’;

② 表格内容,根据上问的自动机图,比如第一行,I0 通过 a 到达 I2,由于 a 是终结符,Action 栏统一写为 S 加序号,所以为 S2,对于 GOTO 栏直接写序号即可,I0 通过 S 到达 I1,所以这里填 1,后面同理;

③ 对于归约项目有I1、I3、I5、I7,其中 I1 的 # 位置统一写 ACC,对于 I3、I5 和 I7 道理一样,这里以 I3 为例,首先去自动机图里找到 I3 所对应的框框,里面是 S → b,然后去上面增广文法的展开式中找 S → b,得到它的索引序号为 2,那么 I3 所对应的 Action 列暂时全部写上 r2;

④ I4 处出现移入和归约冲突的问题,这时就需要通过 Follow 集来进行判断,Follow(S) = {#},Follow(F) = {b,#},b 不属于Follow(S),属于 Follow(F),所以 I4 这里选择移入;

⑤ 修改 I3、I5 和 I7 行,除了 Follow 集中的终结符 b 列外,a 和 c 列均不采用归约,也就是说把 a、c 列的值去掉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/413212.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaWeb开发 —— Ajax

目录 一、介绍 二、原生Ajax 三、Axios 四、案例分析 一、介绍 ① 概念:Asynchronous JavaScript And XML,异步的JavaScript和XML。 ② 作用: 数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据。…

多元函数的基本概念——“高等数学”

各位CSDN的uu们你们好呀,今天,小雅兰的内容是多元函数的基本概念,下面,让我们一起进入多元函数的世界吧 平面点集 多元函数的概念 多元函数的极限 多元函数的连续性 有界闭区域上多元连续函数的性质 平面点集 第一个是坐标平…

中间表示- 到达定义分析

基本概念 定义(def):对变量的赋值 使用(use):对变量值的读取 问题:能把上图中的y替换为3吗?如果能,这称之为“常量传播”优化。 该问题等价于,有哪些对变量y…

R730服务器热插拔换磁盘(raid阵列)

r730服务器发现磁盘闪橙等,说明磁盘报警了,这时候我们就要换磁盘了。 由于本服务器磁盘是raid5的阵列磁盘,所以要采用热插拔的方式换磁盘。 这边要注意的是,不能关机的时候,直接来换磁盘。 因为关机换磁盘&#xff0c…

golang指针相关

指针相关的部分实在是没有搞太明白,抽时间来总结下。 1.指针相关基础知识 比如现在有一句话:『谜底666』,这句话在程序中一启动,就要加载到内存中,假如内存地址0x123456,然后我们可以将这句话复制给变量A&…

什么是服务架构?微服务架构的优势又是什么?

文章目录1.1 单体架构1.2 分布式架构1.3 微服务架构1.4 单体架构和分布式架构的区分1.4 服务架构的优劣点1.4.1 单体架构1.4.2 分布式架构1.4.3 微服务架构1.5 总结1.1 单体架构 单体架构(Monolithic Architecture)是一种传统的软件架构,它将…

算法学习day56

算法学习day561.力扣583. 两个字符串的删除操作1.1 题目描述1.2分析1.3 代码2.力扣72. 编辑距离2.1 题目描述2.2 分析2.3 代码3.参考资料1.力扣583. 两个字符串的删除操作 1.1 题目描述 题目描述: 给定两个单词word1和word2,找到使得word1和word2相同…

探索数据结构之精髓:单链表解密

文章目录1. 前言2. 单链表的特点3. 单链表的基础操作🍑 接口总览🍑 初始化操作🍑 插入操作🍅 优化操作🍑 删除操作🍅 优化操作🍑 获取元素🍅 按置查找🍅 按值查找&#x…

从C出发 20 --- 函数参数深度剖析

我们在编写这个函数的时候参数 n 的值具体是多少? 在编写一个函数的时候参数值是没法确定的,所以将 (int n) 这个参数命名为形参 那么这个参数的值什么时候指定,具体函数调用的时候指定 比如 在main 里面调用 实参用来初始化形参 初始化之…

安装多个版本的Node.js的方法

要在同一台计算机上安装多个版本的Node.js,可以使用以下几种方法: 使用nvm(Node Version Manager):nvm是一个用于管理多个Active Node.js版本的工具。您可以使用nvm轻松地在系统中安装、卸载和切换不同版本的Node.js。…

Leetcode每日一题——“消失的数字”

各位CSDN的uu们你们好呀,今天,小雅兰又开新专栏了,以后会在Leetcode上面进行刷题,尽量每天写一道,请大家监督我!!!好啦,让我们进入Leetcode的世界吧 力扣 对于这道题目&a…

南卡OE Pro上线!开放式耳机新里程碑!前所未有的音质舒适双冠

当前耳机市场放眼望去几乎都是TWS的天下,但是大多数的蓝牙耳机都存在着以下痛点:长时间佩戴涨耳、出现听诊器效应、耳朵内部发痒以及与外界声音隔开缺乏安全性等等问题。 为此,国内智能声学品牌厂商NANK南卡针对用户的特点,于近日…

中小企业如何实施知识管理策略?

随着信息化建设的深入,IT不仅成为企业运营的基础平台,而且在ERP、CRM、OA等信息系统内沉淀了大量的知识,成为企业创新的源泉,大中企业信息化建设中知识管理越来越重要。 应该如何实现知识管理呢? 知识管理本身就属于企…

Flutter系列(七)ListView 图文列表详解

完整工程: Flutter系列(四)底部导航顶部导航图文列表完整代码_摸金青年v的博客-CSDN博客 详细解读: Flutter系列(五)底部导航详解_摸金青年v的博客-CSDN博客 Flutter系列(六)顶部导航详解_摸金青…

初学SSM时做的-IKUN图书管理系统

项目介绍 项目工具:IntelliJ IDEA 2021.2.2 图书后台管理系统,采用SpringBootMybatiusThymeleaf,页面使用Element框架,使用RESTful API风格编写接口。 数据库使用mysql 已实现功能 基本增删改查,联表查询 拦截器登录验证 项目技术栈 Spr…

4.15--设计模式之创建型之责任链模式(总复习版本)---脚踏实地,一步一个脚印

一、什么是责任链模式: 责任链模式属于行为型模式,是为请求创建了一个接收者对象的链,将链中每一个节点看作是一个对象,每个节点处理的请求均不同,且内部自动维护一个下一节点对象。 当一个请求从链式的首端发出时&a…

C++(Qt)软件调试---qmake编译优化和生成调试信息(9)

C(Qt)软件调试—qmake编译优化和生成调试信息(9) 文章目录C(Qt)软件调试---qmake编译优化和生成调试信息(9)1、前言1.1 编译器优化是什么1.2 调试信息是什么1.3 测试环境2、Qt编译模式说明3、比较Linux下Qt三种编译模式1.1 编译生…

DevOps系列文章 - K8S知识体系

环境搭建部分: 1、安装前的准备工作 # 关闭防火墙 systemctl stop firewalld systemctl disable firewalld# 查看hostname并修改hostname # 查看本机hostname hostnamectl set-hostname k8s-master # 把本机名设置成k8s-master hostnamectl status # 查看修改结…

Linux复习 / 文件系统QA梳理

文章目录前言Q&A文件的基本理解Q:谈谈你是怎么理解文件的?Q:什么是当前工作路径?Q:文件与操作系统有着怎样的关系?Q:为什么语言要封装系统接口?文件描述符Q:系统和进…

基于JSP的网上购物系统的设计与实现(论文+源码)_kaic

摘 要 近些年来,社会的生产力和科技水平在不断提高,互联网技术也在不断更新升级,网络在人们的日常生活中扮演着一个重要角色,它极大地方便了人们的生活。为了让人们实现不用出门就能逛街购物,网络购物逐渐兴起慢慢变得…