编译原理复习(2023.4.25考试版本)

news2024/12/26 21:35:35

本次复习采用的是这本书,如有书写不当的地方,欢迎批评指正!
在这里插入图片描述

第一章

image-20230412203438342

第二章

符号串的运算

  • 相等:两个符号串一模一样的

  • 长度:数他有几个就行了

  • 连接:跟在后面直接写就行了

  • 符号传串的逆:在符号的右上方写上-1就表示这个符号串的逆。

image-20230412110829924

  • 前缀、后缀和子串

前缀就是去掉尾部,后缀就是去掉头部。前缀和后缀都是子串,但子串不一定是前缀。

比如:ab 是 abc 的前缀和子串,c 是 abc 的后缀和子串。

  • 幂运算:就是n个字符串不断进行连接操作

​ ω的0次幂 = ξ

​ ω的n次幂 = n个 ω 相连接

符号串集合运算

  • 幂运算

image-20230412112240560

  • 闭包与正闭包

image-20230412112533135

文法的相关概念

1.文法的组成

  • 终结符集合 VT 就是不能再分解的字母,一般用小写字母表示
  • 非终结符集合VN 就是还可以继续进行推导的字母,一般用大写字母表示
  • 开始符号S
  • 产生式规则P

2.句子,句型,句柄,子树,简单子树,短语,简单短语

  • 句子:只包含终结符。(基本上就是全部由小写字母组成)
  • 句型:推导过程中出现的所有符号串都叫做句型。只包含终结符的句型叫做句子。
  • 子树:语法树的某个节点连同他向下射出的部分组成了语法树的子树。
  • 简单子树:高度为2的子树叫做简单子树。下面红笔画出来的这两个子树就叫做简单子树。

image-20230412114138402

  • 简单短语:高度为2的的子树(就是简单子树0)的叶子节点。像上面这棵树中的DE、F就是简单短语。

  • 句柄:最左简单子树末端节点组成的符号串。像上面这颗树,句柄就是DE。

3.规范推导和规范归约

  • 规范推导:最右推导,每次都替换最右边的。
  • 规范归约:最左归约,每次都归约最左边的。

4.二义性

  • 二义性:对于同一个句子存在两个不同的语法树,则称这个句子是具有二义性的。

  • 二义性的解决办法:

    1. 修改编译算法。规定算符之间的优先级。
    2. 直接修改文法。保证归约的顺序(左部的符号在规则右部出现一次也可能会导致二义性)

压缩或简化文法

  • 如果一个文法没有有害规则,也没有多余规则,那么就说该文法是压缩或者简化过的。

1.有害规则

image-20230412193656148

2.多余规则

image-20230412193804431

3.文法等价变换

1.使开始符号不出现在产生式右部

2.使文法每个非终结符均能推导出一个终结符号串.

3.使文法的每个非终结符均出现在某个句型中

4.除特殊规则 A→B

5.消去空规则 A→ε

6.消除左递归 (扩充的BNF表示法)

  • 对于第一点,使开始符号不出现在产生式右部

image-20230412194301929

  • 对于第二点,使文法每个非终结符均能推导出一个终结符号串.

就是先构造一个Vn‘,先找出能直接推出终结符的,然后保证非终结符推出句子(采用了归约的思想),这个没怎么用过,自己也说得不太清楚。

  • 对于第三点,使文法的每个非终结符均出现在某个句型中

就是采用推导的思想,保证非终结符出现在句型中,这个感觉也不咋用。

  • 对于第四点,除特殊规则 A→B

就是去掉中间商,先构造对应的等价文法,假如说出现不在任何句型中出现的非终结符,就删除那几个非终结符对应的规则,感觉也不咋用。

  • 对于第五点,消去空规则 A→ε

就是去掉A->ε,找到产生空串的非终结符和产生式啥能推导出ε,这个也感觉没怎么用过。

  • 对于第六点,消除左递归。这个就非常重要了!!!

我们先看书上的定义。

image-20230412195837362

在做题过程中,直接按照书上给的公式套就行了。

具体怎么使用,可以参考下面的例题

image-20230412201741049

文法的分类与自动机

  • 0型文法,从任意字符串推出任意字符串

  • 1型文法,左边的长度一般比右边的短或者相等

  • 2型文法,产生式的左边都只有一个非终结符,就像下面这样

    image-20230412203022350

  • 3型文法,左线性文法:推导出来的非终结符都放在左边

    ​ 右线性文法:推导出来的非终结符都放在右边

    image-20230412203101656

image-20230412202913181

第三章

正规式到NFA的转换

image-20230413110309314

NFA和DFA的区别

  • NFA是不确定有限自动机,DFA是确定有限自动机

  • NFA可以有若干个初始状态,而DFA只有一个初始状态

  • NFA有若干个后继状态,而DFA只有一个后继状态

NFA到DFA的转换

image-20230413173902935

那么这个状态转换图就画好了。

那如何判断这是DFA还是NFA呢?(考试的话一般来说都是NFA,因为他后面还希望你进行NFA到DFA的转换呢)

如果正规做的话,就是画状态转换表。其实我们直接看状态图就可以看出来,去路不唯一的话就只直接可以判定为是NFA。

image-20230413175307459

下面就是重头戏了,开始进行NFA到DFA的转换

image-20230413184103509

image-20230413184124306

image-20230413184139782

以上这就是NFA到DFA的转换了

第四章

不考大题

  • 词法分析的功能:读入源程序字符串,从左至右逐个扫描,并从其中识别出一系列具有独立意义的最小语法单位——单词。

  • 词法分析的任务:扫描源程序、识别单词、转换并输出属性字。

  • 词法分析的两种处理结构:

    1.词法分析程序作为主程序

    image-20230415095149661

    2.词法分析程序作为子程序

    image-20230415095224612

  • 单词符号的常见种类:保留字、标识符、无符号数 、界限符

  • 词法分析的状态转换图 :

第五章

三种集合(first集、follow集、select集):

  • First集(符号串):就是 要求的符号串 能够推导出来的 第一个终结符
  • Follow集(非终结符):又叫做向前看集,有定义可知,U的向前看集就是由所有含U的句型中紧跟在U之后的终结符或者是 # 所组成的集合。(如果U后面的符号为空,那么就把U后面的符号看成特殊符号#)
  • Select集(产生式):image-20230415100334751

举例说明:

image-20230415112352717

image-20230415112402630

LL(1)文法

  • LL(1)文法就是 没有左递归(形如 A->Ab的这种就属于左递归)

    ​ 没有回溯(两个产生式左部的第一个符号相同这样式的就属于回溯,比如

    ​ A->ay|ab,这就是回溯,方法就是提左公共因子,改成A->M,M->a|b就行了)

  • 举例子

    image-20230415183550049

LL(1)分析表的构造

  • LL(1)分析表的构造:

需要知道的是:C表示继续读下一个符号;

​ R表示重读当前符号,即不读下一个符号;

​ RE(β)表示用β的逆串替换栈顶符号

还有一些规则需要知道:

  1. 如果产生式第一个是非终结符,就写 产生式逆序/R
  2. 如果产生式第一个是终结符,就写 去掉那个首部终结符后 的产生式的逆序/C
  3. 如果产生式为空,就写 ξ/R
  4. [#,#] = succ
  5. 如果有的终结符不出现在任何规则右部的首部,那么 [VT,VT] = ξ/C
  6. 其他情况属于出错,就是error,在分析表中用空白表示

画LL(1)分析表之前,要先写出对应的select集,然后以此为对照

画LL(1)分析表的时候,纵轴写出现的所有符号(除了 ξ),右边写所有的终结符包括#

举个例子

image-20230415190510294

第六章

简单优先方法

  • 简单优先关系

    #作为语句定界符,其优先级最低。

    image-20230415191118809

  • 判断是否为简单优先文法:

    一个文法是简单优先文法,需要满足以下两个条件:

    1. 在文法符号集中V,任意两个符号之间必须之后一种优先关系存在。
    2. 在文法中,两个产生式不能有相同的右部。

判断是否为简单优先文法,首先要分析确定文法中各符号之间的优先关系。

判断优先关系的话,我们需要知道以下规则:

  1. “ < ”关系 :如果规则的右部是 终结符+非终结符 这样的组合,那么 终结符 < 这个非终结符推导出来的第一个符号
  2. “ > ” 关系:如果规则的右部是 非终结符+终结符这样的组合,那么 这个非终结符推出来的最后一个符号 > 终结符
  3. “ = ” 关系:p—>AB,那么 A = B

举个例子

image-20230415202534222

该文法满足简单优先文法的条件。所以是简单优先文法。

  • 简单优先文法的分析过程是规范规约。

算符优先方法

  • 算符优先分析法适用于表达式的分析。

  • 什么叫做算符文法:任何一个产生式中都不含有两个非终结符相邻的情况,那么该文法是一个算符文法

  • 算符优先关系矩阵的构造方法:

    1.对每个非终结符构造A构造两个集合 FIRSTVT (A) 和 LASTVT (A)

​ FIRSTVT (A) = a, a是 A=>a…或 Ba…

​ LASTVT (A) = a, a是A=>…a 或 …aB

2.确定优先关系

​ (1)“=”关系:如果是 A->…ab… 或者是 A-> …aBb…这种样子的,那么a=b

​ (2)“<“关系:如果规则右边是 终结符+非终结符(这个用A来表示),那么 非终结符<FIRSTVT (A)

​ (3)”>“关系:如果规则右边是 非终结符(这个用A来表示)+终结符,那么 LASTVT (A) >终结符

举个例子

image-20230415215011707

LR分析表

LR分析表包括两部分:分析动作表(ACTION)和状态转换表(GOTO)

在action表中,动作有四种可能:

  • 归约r,比如 r3 就是用第三条规则进行归约
  • 移进s,继续扫描,从下一个输入符号成为当前输入符号
  • 接受acc,当输入串只#时,分析完成
  • 报错erroe

LR(0)分析表

考试一般就考LR(0)表的构造

这里我们采用课后题6.4进行参考,如下图

image-20230419101100997image-20230419101111507

S7的出现可以参考下面这个进行理解:

  1. 同一项目的状态集中,若不同项目的后继符号相同,则后继状态相同
  2. 不同项目状态集中,若出现对应的相同项目,则后继状态也相同

image-20230419101118180

SLR(1)方法是简单的LR(0)分析方法,SLR(1)分析表中是不含有冲突动作的,如果发现LR(0)分析表中含有冲突动作(书上113页的表6.19就含有冲突动作),那么就把他改成SLR(1),去掉冲突。

image-20230419103533067

SLR(1)分析表

SLR(1)和LR(0)分析表的构造方法差不多,主要区别就是构造好项目集规范族之后,进行SLR(0)表构造的时候,当后继符号是终结符时,只有这个终结符属于 Follow(规则左边)的时候,才会写r,不属于的就不写。

第七章

语义分析

  • 语义分析的基本任务:

    1. 类型的确定:数据对象的类型
    2. 类型的检查:对运算及运算量的类型检查
    3. 确认含义:确认控制结构的含义
    4. 其他语义检查:不允许循环体外到体内等
  • 实现语法制导翻译的方法

    1. 增量式文法
    2. 属性文法

中间代码

  • 抽象语法树
  • 逆波兰式
  • 四元式
  • 三元式

第八章

代码优化分类:

image-20230419113040234

代码优化技术:

  • 合并常量运算
  • 删除无用赋值
  • 削减运算强度
  • 删除多余运算
  • 外提不变表达式

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

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

相关文章

详解UDP协议与实现UDP版本字典翻译客户端与服务器

文章目录 前言1. UDP协议介绍2.UDP Socket的介绍3. UDP版本字典翻译服务器4. UDP版本字典翻译客户端 前言 UDP协议也是传输层的一种协议&#xff0c;上篇文章我们介绍了TCP协议可以参考我的另一篇博客详解TCP协议以及实现TCP版本的字典翻译服务器客户端&#xff0c;以下来介绍…

【k8s】Wordpress(PHP+nginx+mysql)迁移到k8s

一、迁移思路&#xff1a; 1、制作服务镜像; 1.1 挑选合适的基础镜像; 1.2 准备代码相关的文件; 1.3 通过dockerfile构建镜像;2、制作Kubernetes服务&#xff0c;并完成调度; 2.1确定服务运行的模式&#xff08;内部运行or 对外提供); 2.2确定服务所使用的控制器; 2.3服务是否…

【邀请函】第四届宁德国际新能源电池与智造技术产业大会(4月26 宁德)| 达索系统百世慧®

未来5-10年&#xff0c;新能源电池行业将呈现“一大支柱、两大应用场景、多元化技术线路”的发展特征。动力锂电池仍将主导新能源电池产业&#xff0c;并加速乘用场景落地。随着技术的日趋成熟&#xff0c;量产后成本下降&#xff0c;优势逐步凸显。 但随着技术迭代&#xff0…

Maya 贴图链接检测重链打包插件tjh_lost_textures_finder 1.3.3

一、问题描述&#xff1a; maya在模型材质贴图及渲染制作流程中&#xff0c;经常会遇到工程文件路径更改后&#xff0c;图片链接失效的问题&#xff0c;还有就是萌新们不懂规矩&#xff0c;图片路径乱放&#xff0c;而造成的图片打包时巨大工作量&#xff0c;南无阿弥陀佛。此…

vue关于echarts后端返回格式取值方法

在vue中&#xff0c;接口返回如下数据&#xff1a; data: {充电桩: [0, 0, 78], 红外摄像头: [0, 0, 0], 火焰探测器: [0, 1, 0], 烟雾传感器: [0, 1, 1], 限流保护器: [0, 0, 1]}&#xff0c; 其中数组里第一个值应该放在data1&#xff0c;第二个放在data2&#xff0c;第三个…

LCHub:微软Power Apps成为保险行业最受欢迎低代码平台

全球领先的保险行业软件服务商Adacta发布了《保险行业低代码应用情况》报告,深度揭示了保险领域对低代码的应用、市场增长、发展趋势等。 该报告对来自德国、奥地利、瑞士、法国、英国、比利时、荷兰和卢森堡等国家的100名保险行业的高管进行了深度调查。(发送“保险低代码”…

社科院杜兰大学金融管理硕士项目——不要停止奔跑,前方更值得期待

不要停止奔跑&#xff0c;不要回顾来路&#xff0c;来路无可眷恋&#xff0c;唯有前方值得期待。——《马男波杰克》。这段话很适用在职的我们&#xff0c;当我们在职场经过打磨&#xff0c;我们被磨平了棱角&#xff0c;被磨掉了脾气&#xff0c;但我们依然相信前方会更值得我…

安装和部署elasticsearch

文章目录 一、安装elasticsearch1.1 部署单点elasticsearch1.1.1 创建网络1.1.2 安装镜像1.1.3 部署1.1.4 测试 1.2 部署kibana1.2.1 安装镜像1.2.2 部署1.2.3 测试1.2.4 DevTools工具 1.3 安装IK分词器1.3.1 安装ik插件1.3.2 查找数据卷目录1.3.3 上传至容器1.3.4 测试 一、安…

腾讯优图入选人工智能顶级会议AAAI论文--10篇

人工智能领域的国际顶级会议AAAI 2020将于2月7日-2月12日在美国纽约举办。近年来随着人工智能的兴起&#xff0c;AAAI每年举办的学术会议也变得越来越火热&#xff0c;每年都吸引了大量来自学术界、产业界的研究员、开发者投稿、参会。 以AAAI2019为例&#xff0c;论文提交数量…

工单管理系统的好处

工单管理系统是一款能够实现业务流程管理&#xff0c;工作任务管理&#xff0c;服务项目管理的工具。该系统能够帮助企业提高客户服务质量、加快企业服务响应速度、降低企业运营成本。 工单管理系统能通过制定计划和控制流程来减少客户投诉&#xff0c;提高客户满意度。可以说…

为什么安全从业者应该了解业务

不久之前&#xff0c;网络安全还被视为独立于企业其他部分的事物。但在过去的十年里&#xff0c;它终于得到了当之无愧、渴望已久的认可和关注。 越来越多的公司聘请首席信息安全官来帮助制定整体业务战略&#xff0c;使安全成为公司董事会的首要任务。 最后&#xff0c;首席…

k8s允许master节点参与调度的设置方法

默认情况下&#xff0c;master节点是不参与调度的&#xff0c;且在master节点上有一个污点NoSchedule&#xff08;表示k8s将不会将Pod调度到具有该污点的Node上&#xff09;&#xff0c;有关污点章节可参考https://www.cnblogs.com/panw/p/16343392.html 如果想让master节点参与…

云原生可观测性平台deepflow部署

deepflow是什么 DeepFlow 是云杉网络 (opens new window)开源的一款高度自动化的可观测性平台&#xff0c;是为云原生应用开发者建设可观测性能力而量身打造的全栈、全链路、高性能数据引擎。DeepFlow 使用 eBPF、WASM、OpenTelemetry 等新技术&#xff0c;创新的实现了 AutoT…

界面控件DevExpress WinForm的垂直网格组件,让数据展示更灵活!(一)

DevExpress WinForm Vertical Grid&#xff08;垂直网格&#xff09;组件设计用于提供UI灵活性&#xff0c;它允许显示数据集中的单个行&#xff0c;或在其90度反向网格容器中显示多个数据集行。此外&#xff0c;开发者还可以将其用作属性网格&#xff0c;就像在Visual Studio …

逻辑回归与梯度下降法

逻辑回归&#xff1a;是用来进行分类的。 逻辑回归的线性预测输出可以写成&#xff1a;y^wTxb 引入Sigmoid函数&#xff0c;让输出限定在[0,1]之间&#xff0c;y^Sigmoid(wTxb)σ(wTxb) 单个样本损失函数&#xff1a;L(y^,y)−(ylog y^(1−y)log (1−y^)) 对逻辑回归进行梯度…

【pytorch系列】优化器optimizer的使用与常用优化器

1 optimizer类实例 1.1 介绍 属性 【default】该实例的类型为 dict&#xff0c;元素为初始化时候的学习率等&#xff0c;具体的keys为 [lr,momentum, dampening, weight_decay, nesterov]【state】保存参数更新过程中的一些中间变量&#xff0c;如momentum的缓存&#xff08…

网络安全-kali配置ssh服务+敏感文件泄+dirsearch脚本

网络安全-kali配置ssh服务敏感文件泄dirsearch脚本 seccure shell 就是加密的telnet 远程用的 service ssh start 开启ssh服务metstat -tpan |gerp 22 监听这个端口是否开启 可以看到本地的22端口这个文件是/etc/ssh/sshd_config 输入 set number 找到第57行 把这个前面的#注…

Smartbi电子表格软件产品的由来

思迈特软件&#xff08;以下简称“Smartbi”&#xff09;自2022年11月以来发布的「Smartbi Spreadsheet 电子表格软件」产品&#xff08;以下简称“电子表格软件”或"Spreadsheet"&#xff09;。 这个软件就是报表工具&#xff0c;那为什么不叫 Report&#xff0c;而…

java 自习室找座系统 mysql

自习室座位管理系统采用B/S结构、结合网络数据库开发技术来设计本系统。开发语言采用JSP&#xff0c;数据库使用Mysql数据库。完成以下基本功能&#xff1a; 功能&#xff1a; 1界面&#xff08;管理员登录、学生登录&#xff09; 2管理员更新自习室剩余座位情况 3学生查询自习…

误差与精度

整理自《误差理论与数据处理》——合肥工业大学 机械专业用于教授学生误差与精度概念的课程叫做《公差与测量》&#xff0c;而公差的本质含义就是误差&#xff0c;所以这门课其本质教授的还是误差理论。当时在学校并没有好好学习这么课程&#xff0c;工作之后才发现这个课程的重…