【编译原理--复习】

知识点整理

第一章

在这里插入图片描述
同时伴有表格管理、出错处理

1、词法分析
任务:对构成源程序的字符串进行扫描和分解,识别出单词(如标识符等)符号
输入:源程序
输出:单词符号序列

2、语法分析
任务:根据语言的语法规则对单词符号串(符号序列)进行语法分析,识别出各类语法短语(可表示成语法树的语法单位),判断输入串在语法上是否正确
输入:单词序列
输出:语法分析后的单词序列

3、语义分析
任务:按语义规则对语法分析器归约出的语法单位进行语义分析,审查有无语义错误,为代码生成阶段收集类型信息,并进行类型审查和违背语言规范的报错处理

4、中间代码生成
任务:将语义分析得到的源程序变成一种结构简单,含义明确,容易生成,容易译成目标代码的内在代码形式
常用的中间代码形式是四元式(算符,运算对象1,运算对象2,结果)

5、代码优化
任务:对中间代码或目标代码进行变换改造等优化处理,使生成的代码更高效

6、目标代码生成
任务:将语义分析结果或中间代码生成特定机器上的绝对或可重定位的指令代码或汇编指令代码

  • 编译程序必须有词法分析、语法分析、语义分析、代码生成,中间代码生成和代码优化不要求有。
  • 任何一个编译程序都必须有目标代码生成部分。
  • 编译程序绝大多数时间花在(表格管理)。
  • LEX是用于词法分析的工具,YACC是用于语法分析的工具。
  • 多遍扫描第一遍扫描的是源程序,其它各遍扫描的是前一阶段的加工结果,即某种形式的中间代码。
  • 代码优化不能提高编译程序自身的运行速度,但可使目标代码质量高。
  • 无符号常数的识别和拼数工作通常在(词法分析)阶段完成。
  • 编译程序是对(高级语言的翻译)。
  • 解释程序和编译程序的区别在于(是否生成目标代码)
  • 编译程序的工作过程一般可包括词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成基本阶段,同时还伴有表格管理和出错处理。
  • 一遍扫描的编译程序的优点是(编译速度快)。
  • 将编译程序分成若干个“遍”是为了(使程序的结构更加清晰)。
  • 无符号常数的识别和拼数工作通常在(词法分析)阶段完成
  • “运算符与运算对象类型不匹配”属于(语义错误)。
  • 编译程序是一种(系统)软件。
  • 绝大多数程序设计语言是上下文有关语言。
  • 语法树描述的是句型。

第二章

1、语言概述

1、语言是由句子组成的集合,是由一组符号构成的集合
2、程序设计语言——所有该语言的程序的全体

语法——表示构成语言句子的各个记号之间的组合规律
语义——表示各个记号的特定含义。(各个记号和记号所表示的对象之间的关系)
语用——表示在各个记号所出现的行为中,它们的来源、使用和影响
文法是一些规则的有限集合,它是以有穷规则集来刻划无穷句子集合的工具
BNF是一种广泛采用的( 描述文法)工具。

2、文法及产生式

产生式——设VN ,VT 分别是非空有限的非终结符号集和终结符集。V = VN ∪ VT ,VN ∩ VT = ∅ 。所谓产生式是一个序偶对(α ,β),其中 α ∈ V+,β ∈ V*,通常表示为:α → β 或 α ::= β,产生式也叫规则、重写规则、生成式。

文法 G 是一个四元组,G = (VN,VT,P,S)。其中,VN,VT 分别是非空有限的非终结符集和终结符集,且 VN ∩ VT = ∅;P为产生式集;S ∈ VN 为文法的开始符号(或识别符),它是一个非终结符,至少要在一条规则中作为左部出现。

3、文法分类

  • 0型(短语文法,图灵机):

产生式形如: α → β
其中:α ∈ ( V T ∪ V N ) ∗且至少含有一个非终结符;β ∈ ( V T ∪ V N ) ∗
α、β都是由终结符和非终结符组成的任意串,但α含有一个非终结符(全是终结符就没法定义了)

2型文法(上下文无关文法是0型文法的一个特例)

  • 1型(上下文有关文法,线性界限自动机):

产生式形如: α → β
其中:α ∈ ( V T ∪ V N ) ∗ α∈ (V_T∪V_N)^*α∈(V T∪V N) ∗
且至少含有一个非终结符;β ∈ ( V T ∪ V S ) ∗

∣ α ∣ ≤ ∣ β ∣ ,仅 S → ε 例外。

左边一定比右边短

  • 2型(上下文无关文法,非确定下推自动机):

产生式形如: A → β A → βA→β
其中:A ∈ V N ; β ∈ ( V T ∪ V N ) ∗ A∈ V_N;β∈ (V_T ∪ V_N)^*A∈VN;β∈(V T∪V N) ∗

左边是一个非终结符,右边是终结符非终结符组成的任意串。

二义性文法是上下文无关文法。

  • 3型(正规文法,有限自动机):

右线性文法
产生式形如: A → α B 或 A → α A → αB 或 A → αA→αB或A→α
其中: α ∈ V T ∗ ; A , B ∈ V N α∈ V_T^*;A,B∈V_Nα∈V T∗;A,B∈V N

右边要么没有非终结符
如果有非终结符的话,只能出现在最右边。

左线性文法
产生式形如: A → B α 或 A → α A → Bα 或 A → αA→Bα或A→α
其中: α ∈ V T ∗ ; A , B ∈ V N α∈ V_T^*;A,B∈V_Nα∈V T∗ ;A,B∈V N

右边要么没有非终结符
非终结符要出现,只能在定义式的最左边。

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

4、上下文无关文法与语法树

语法树也称推导树,给定文法G=(VN,VT,P,S),对于文法 G 的任意一个句型都存在一个相应的语法树,它满足:

① 树中每一个结点都有一个标记,此标记是 V = VN ∪ VT 中的一个符号
② 根的标记是S
③ 若树的一结点 A 至少有一个子孙,则 A ∈ VN
④ 如结点 A 的子孙结点从左到右次序为 B1,B2 …… Bn,则必有产生式 A → B1B2…Bn
​ 同一语法树可以表示对同一句型不同的推导过程
​ 如果每一步 α → β 中,都是对 α 中最左(右)非终结符进行替换,则称之为最左(右)推导。最右推导称为规范推导,由规范推导所得的句型称为规范句型
​ 同一语法树最多对应唯一的最左(右)推导
​ 一个句型有可能对应着不同的语法树
​ 如果一个文法存在某个句子对应着两棵不同的语法树,则称此文法是二义的
​ 不存在算法判断一个 2 型文法是否是二义的
​ 实际应用中,常找出一组无二义性的充分条件来构造无二义性文法

5、句型的分析

​ 句型的分析就是识别一个符号串是否为某文法的一个句型
​ 分析算法分为两大类:自顶向下分析和自底向上分析

自顶向下分析:由根向下逐步建立语法树,是一个逐步推导的过程
自底向上分析:自底向上构造语法树,是一个逐步规约的过程

名称概念
短语在语法树中表示所有分支结点对应子树,短语即子树叶子对应的符号
直接短语在语法树中表示为该短语只有上下相邻父子两代
句柄句柄表示最左直接短语
素短语是指一个短语至少包含一个终结符,并且除它自身之外不再包含其他素短语
最左素短语最左素短语就是句型最左边的素短语,是算符优先分析法的规约对象。语法树: 通过语法树分析时,要注意先判断是否为素短语,再找相对最左端的素短语。

例题1:求短语,直接短语,句柄
给定句型:

FF↑a

给定文法:

G[T]:
T → T*F|F
F → F↑P|P
P → (T)|i

解析:
推导步骤为:

T ⇒ TF*
⇒ TFF
⇒ TF↑*\F*
⇒ TF↑a

画出语法树为:
在这里插入图片描述

第三章

1、词法分析程序的设计

1、词法分析程序的输出
在这里插入图片描述
2、词法分析程序中如何识别单词
在这里插入图片描述

2、单词的形式化描述工具

在这里插入图片描述

1、正规文法

在这里插入图片描述

2、正规式

在这里插入图片描述

对给定的字母表∑ ∑∑
1)ε εε和Ф ФФ都是∑ ∑∑上的正规式,它们所表示的正规集为{ε εε}和Ф ФФ;
2) 任何a ∈ ∑ a∈ ∑a∈∑,a是∑ ∑∑上的正规式,它所表示的正规集为{a} ;
3) 假定e1和e2都是∑ ∑∑上的正规式,它们所表示的正规集为L(e1)和L(e2),则

  • i) (e1|e2)为正规式,它所表示的正规集为L(e1)∪L(e2),(两个正规集的并还是正规集)
  • ii) (e1.e2)为正规式,它所表示的正规集为L(e1)L(e2),(两个正规集的连接还是正规集)
  • iii) ( e 1 ) ∗ (e1)^(e1) ∗为正规式,它所表示的正规集为( L ( e 1 ) ) ∗ (L(e1))^(L(e1)) ∗,(一个正规集的闭包还是正规集)

仅由有限次使用上述三步骤而定义的表达式才是∑ 上的正规式,仅由这些正规式表示的字集才是∑ 上的正规集

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

3、正规文法和正规式的等价性

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

有穷自动机

在这里插入图片描述
1、确定有限自动机(DFA)
在这里插入图片描述

在这里插入图片描述

2、不确定的有穷自动机(NFA)
在这里插入图片描述
在这里插入图片描述

3、NFA转换为等价的DFA
在这里插入图片描述

子集算法
步骤:
1、确定列数(有几种弧就有几列),找到起始状态的所有在这里插入图片描述
然后列表,直到出现重复的就停止。

在这里插入图片描述
2、重新命名表里的状态,画DFA
在这里插入图片描述

状态等价
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

1、相关概念

  • first集

在这里插入图片描述

  • Follow集
    在这里插入图片描述
  • Select集
    在这里插入图片描述

2、LL(1)文法

在这里插入图片描述

1、LL(1)文法的判别

在这里插入图片描述

2、判断LL(1)文法的步骤

在这里插入图片描述

3、对文法进行等价交换

在这里插入图片描述
提取左公共因子
在这里插入图片描述

消除左递归
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
LL(1)分析
在这里插入图片描述

例题整理

第二章

1、设有文法G[S]:

S®A

A®B|IF A THEN A ELSE A

B®C|B+C|+C

C®D|C*D|*D

D®x|(A)|- D

求文法的非终结符集合和终结符集合
非终结符集合={S, A, B, C, D}

终结符集合={IF, THEN, ELSE, +, *, x, (, ), -}
2、消除文法G[A]中的多余规则。

G[A]:

A®Bcd|dD

B®AB|b

C®c

D®AD|DB

E®Da|Eb|e
由于有关D的规则推导不出终结符号串,有关C和E的规则不可到达,所以化简后的文法为

A®Bcd

B®AB|b
3、设有文法G[S]:

S®aAb

A®BcA|B

B®idt|e

请问下列符号串是否为文法的句子或句型,如果是,请画出语法树。

①aidtcBcAb

②aidtccb

③ab

④abidt

①②③能由文法识别符号S推导出,且②③均由终结符号组成,所以①②③是句型,②③还是句子。对识别符号S仅有一条右部为aAb的规则,推导出的符号串的最右部不可能是t,所以④不可能是句型,也不可能是句子。(语法树略)
4、设有文法G[S]:

S®bTc|a

T®R

R®R/S|S

请问bR/bTc/bSc/ac是否为该文法的句型?若是,请画出该句型的语法树,并分析其短语、直接短语和句柄。
在这里插入图片描述
在这里插入图片描述
5、已知文法G[Z]:

Z®aZbZ|aZ|a

证明该文法是二义的。在这里插入图片描述
6、给出描述语言L(G)={a2nbn|n³1}的2型文法。
在这里插入图片描述
7、试给出描述语言L(G)={a2m+1bm+1|m³0}È{a2mbm+2|m³0}的文法。
在这里插入图片描述

第三章

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、字母表∑={a,b}上的正则式R=(ba|a)*,请给出与正则式R等价的正则文法。

思路:1. 求与正则式R等价的NFA;2. 将NFA确定化得到DFA;3. 根据DFA转换为正则文法的方法,得到与正则式等价的正则文法。
在这里插入图片描述
至少使用两种不同的形式表示法描述由7/9的一切精度的近似值组成的集合。

提示:

7/9是一个近似值,约等于0.77777…,实际考察如何表示出符号串“0.77777…”。

找出该符号串的特点,可以采用正规文法、正则式及有穷自动机三种方法进行描述。
在这里插入图片描述

第四章

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

第五章

第六章

在这里插入图片描述

A4整理

1、正规式转正规文法

在这里插入图片描述

2、NFA转DFA(NFA确定化)

1、列表
在这里插入图片描述

直到某一行的结果全部在第一列出现时结束
2、重新命名表里的状态,画DFA

3、正规式转NFA

在这里插入图片描述

4、正规式转DFA

步骤:

  1. 正规式转NFA
  2. NFA确定化

5、DFA最小化

1、
在这里插入图片描述
2、找出终态集和初态集,然后分区,去重
3、重新命名表里的状态,画DFA

6、提取左公共因子

在这里插入图片描述

7、消除左递归

1、直接左递归
在这里插入图片描述
2、间接左递归
通过代入法,变为直接左递归

求first集、follow集、select集

  • first集

在这里插入图片描述

在这里插入图片描述

  • follow集

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

  • Select集
    在这里插入图片描述在这里插入图片描述

判断是不是LL(1)文法

在这里插入图片描述
如果交集为空,不是;反之,是LL(1)文法

LL(1)预测分析表

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

在这里插入图片描述

构造语言的文法

文法G[S]=(VN,VT,P,S)

规约推导

最右推导:规范推导
最左规约:规范规约

文法->状态转换图->等价文法

分析语言,画状态转换图

LR(0)分析

项目的分类:

  1. 移进项目,形如A->a.ab(圆点后面是终结符)
  2. 待约项目,形如A->a.Bb(圆点后面为非终结符)
  3. 归约项目,形如A->a. (圆点在最右端的项目)
  4. 接收项目,形如S’->a.(S’->a为拓广文法)
判断LR(0)文法

识别活前缀中无冲突项目(移进–归约冲突,归约–归约冲突)

LR(0)分析表
  1. 拓广文法(当S只在产生式左边产生时不用拓广)
  2. 识别活前缀的DFA
    慢慢顺圆点,当圆点后面是非终结符的时候继续往下顺
  3. 画分析表
    在这里插入图片描述 在这里插入图片描述

SLR(1)文法

判断SLR(1)文法
  1. DFA中存在冲突(移进–归约,归约–归约)
  2. 存在冲突的I里面的归约项目左部的FOLLOW集交移进项目的输入符号为空
SLR(1)分析表

对每个归约项目A->a,求FOLLOW(A)得到的输入处填rn,其余同LR(0)分析一样

LR(1)文法

FIRSTVT和LASTVT的求法

FIRSTVT

  • S->aB… FIRSTVT(S)={a}
  • T->T,S FIRSTVT(S)={,}
  • S->Q FIRSTVT(S)=FIRST(Q)
    LASTVT
  • S->Bb… LASTVT(S)={a}
  • T->T,S LASTVT(T)={,}
  • S->Q LASTVT(S)=LAST(Q)

算符优先分析表的构造方法

在这里插入图片描述
特殊的:

  • A->bC b<FIRSTVT©
  • A->Bc LASTVT(B)>c

在这里插入图片描述

算符优先文法

  1. 如果一个问发的任何产生式右部都不含两个相继(并列)的非终结符,即不含有如下形式的产生式右部:…QR…
  2. 任意两个算符之间不存在多余一种的优先关系

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

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

相关文章

数据分析基础之《numpy(5)—合并与分割》

了解即可&#xff0c;用panads 一、作用 实现数据的切分和合并&#xff0c;将数据进行切分合并处理 二、合并 1、numpy.hstack 水平拼接 # hstack 水平拼接 a np.array((1,2,3)) b np.array((2,3,4)) np.hstack((a, b))a np.array([[1], [2], [3]]) b np.array([[2], […

drools入门案例

1 业务场景说明 业务场景&#xff1a;消费者在图书商城购买图书&#xff0c;下单后需要在支付页面显示订单优惠后的价格。具体优惠规则如下&#xff1a; 规则编号 规则名称 描述 1 规则一 所购图书总价在100元以下的没有优惠 2 规则二 所购图书总价在100到200元的优惠2…

tampermonkey:Tampermonkey受欢迎的用户脚本管理器油猴

Tampermonkey for Mac是一款用户脚本管理器&#xff0c;主要用于在网页上运行自定义的JavaScript代码&#xff0c;以增强网站的功能和外观。它支持在各种浏览器中使用&#xff0c;包括Chrome、Firefox和Safari等主要浏览器。 以下是Tampermonkey for Mac软件的主要特点&#x…

RocketMQ 入门:MQ 基础概念、集群搭建与高可用配置,消息示例详解

RocketMQ 入门 视频地址&#xff1a; 千锋教育RocketMQ全套视频教程&#xff0c;快速掌握MQ消息中间件 什么是 MQ &#xff1f; Message Queue&#xff08;消息 队列&#xff09;&#xff0c;从字面上理解&#xff1a;首先它是一个队列。FIFO 先进先出的数据结构 —— 队列…

postgresql|数据库|LVM快照热备冷恢复数据库的思考

一&#xff0c; LVM快照备份的意义 数据库备份一直是数据库运维工作中的重点&#xff0c;一个完备的备份不仅仅是仅有后悔药的功能&#xff0c;还可能有迁移数据库的作用。 那么&#xff0c;数据库备份系统我们需要的&#xff0c;也就是看重的是四个点&#xff0c;甚至更多的…

【LeetCode刷题笔记】前缀树

208. 实现 Trie (前缀树) 解题思路: 1. 前缀树 Map实现 ,使用一个 Map<Character, Trie> 来存储 每个字符 对应的 若干子节点 ,在构造函数中初始化 根节点 root 为 当前对象实例 , 在 插入

java的XWPFDocument3.17版本学习

maven依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version> </dependency> 测试类&#xff1a; import org.apache.poi.openxml4j.exceptions.InvalidFormatExcep…

Python+Playwright自动化测试--playwright处理浏览器多窗口切换

1.简介 浏览器多窗口的切换问题相比大家不会陌生吧&#xff0c;之前小编在javaselenium系列文章中就有介绍过。大致步骤就是&#xff1a;使用selenium进行浏览器的多个窗口切换测试&#xff0c;如果我们打开了多个网页&#xff0c;进行网页切换时&#xff0c;我们需要先获取各…

R软件包ConsensusCluster进行共识聚类(Consensus Clustering)

从下面论文看到这个方法&#xff1a; Wang, Xin, et al. "Deep learning using bulk RNA-seq data expands cell landscape identification in tumor microenvironment." Oncoimmunology 11.1 (2022): 2043662. 这篇论文基于 AI 方法对 bulk RNA-seq 数据识别肿瘤微环…

10、基于LunarLander登陆器的Dueling DDQN强化学习(含PYTHON工程)

10、基于LunarLander登陆器的Dueling DDQN强化学习&#xff08;含PYTHON工程&#xff09; LunarLander复现&#xff1a; 07、基于LunarLander登陆器的DQN强化学习案例&#xff08;含PYTHON工程&#xff09; 08、基于LunarLander登陆器的DDQN强化学习&#xff08;含PYTHON工程…

【动态规划算法(dp算法)】之背包问题

文章目录 背包问题动规五部曲一、0-1背包问题 &#xff1a;限制物品不可重复 (要么不选 要么选一个)二、完全背包问题&#xff1a;不限制重复&#xff08;要么不选 要么可以多选&#xff09;&#xff08;完全背包可以转化为0-1背包问题&#xff09; 动态规划&#xff1a;01背包…

使用OpenCV4实现工业缺陷检测的六种方法

目录 1 机器视觉2 缺陷检测3 工业上常见缺陷检测方法 1 机器视觉 机器视觉是使用各种工业相机&#xff0c;结合传感器跟电气信号实现替代传统人工&#xff0c;完成对象识别、计数、测量、缺陷检测、引导定位与抓取等任务。其中工业品的缺陷检测极大的依赖人工完成&#xff0c;…

企业数据治理:(1)概述

目录 确定数据治理的规范与标准 设立与数据治理规范和标准相匹配的组织架构 明确数据治理的范围 制定切实可行的治理目标与实施计划 数据治理是企业IT系统建设当中的重要组成部分&#xff0c;是一种综合性的方法和实践&#xff0c;目的在确保数据的完整性、准确性和一致性。…

部署tomcat单机多实例,keepalived+mysql的互为主从高可用,mysql+keepalived高可用

部署tomcat单机多实例 在Tomcat中部署单机多实例是一种常见的做法&#xff0c;它允许您在同一台服务器上运行多个独立的Tomcat实例&#xff0c;每个实例都有自己的配置、日志和应用程序。 安装jdk环境 首先配置java环境 [roottomcat ~]# tar xf jdk-8u211-linux-x64.tar.gz…

nodejs+vue+ElementUi会员制停车场车位系统

总之&#xff0c;智能停车系统使停车场管理工作规范化&#xff0c;系统化&#xff0c;程序化&#xff0c;避免停车场管理的随意性&#xff0c;提高信息处理的速度和准确性&#xff0c;能够及时、准确、有效的查询和修改停车场情况。 三、任务&#xff1a;小组任务和个人任务 智…

旅游海报图怎么做二维码展示?扫码即可查看图片

现在旅游攻略的海报可以做成二维码印刷在宣传单单页或者分享给用户来了解目的地的实际情况&#xff0c;出行路线、宣传海报等。用户只需要扫描二维码就可以查看内容&#xff0c;更加的方便省劲&#xff0c;那么旅游海报的图片二维码制作的技巧有哪些呢&#xff1f;使用图片二维…

2015年第四届数学建模国际赛小美赛A题飞机上的细长座椅解题全过程文档及程序

2015年第四届数学建模国际赛小美赛 A题 飞机上的细长座椅 原题再现&#xff1a; 航空公司座位是指在旅途中乘客可以乘坐的座位。一些航空公司现在推出了新的经济舱“超薄”座位。这些座椅除了重量较轻外&#xff0c;理论上还允许航空公司在不显著影响乘客舒适度的情况下增加运…

STL中优先队列的模拟实现与仿函数的介绍

文章目录 仿函数优先队列的模拟实现 仿函数 上回我们说到&#xff0c;优先队列的实现需要用到仿函数的特性 让我们再回到这里 这里我们发现他传入的用于比较的东西竟然是一个类模板&#xff0c;而不是我们所见到的函数 我们可以先创建一个类&#xff0c;用于比较大小 struc…

陶建辉在 CIAS 2023 谈“新能源汽车的数字化”

近年&#xff0c;中国的新能源汽车发展迅猛&#xff0c;在全球竞争中表现出色&#xff0c;已经连续 8 年保持全球销量第一。在新兴技术的推动下&#xff0c;新能源汽车的数字化转型也正在加速进行&#xff0c;从汽车制造到能源利用、人机交互&#xff0c;各个环节都在进行数字化…

RobotMaster学习——工序导入,参数设置,轨迹生成

目录 引出1.导入工序2.修改刀具其他刀具参数 3.进行工序分配4.设置TCP5.设置工作站6.工序整体导入配置7.进行计算 总结 引出 RobotMaster的操作流程&#xff0c;从导入工序到生产轨迹。 1.导入工序 2.修改刀具 要选择第七把刀具 其他刀具参数 第一把刀具 第二把刀具 第三把刀…