编译原理课程总结(正在更新中)

程序语言设计

编译的步骤:词法分析,语法分析,语义分析,目标代码生成,目标代码优化

1.词法分析:从字符串中识别一个个的单词

2.语法分析:从符号流中识别出语法单位

3.语义分析:对语法单位进行翻译

4.目标代码生成:中间代码转化为目标代码

        常用的三地址指令

        三地址指令的四元式

5.优化:对中间代码进行等价变换,使得生成的目标程序效率更高

翻译:将一种语言的程序转换成另一种语言的程序

汇编程序:将汇编语言程序翻译为机器语言程序的程序

编译程序:将高级语言程序翻译为低级语言程序的程序

程序语言的分类:强制式,函数式,逻辑式,对象式

程序语言的变量属性:作用域,生存期,值,类型

数据类型:对存储器中所存储的数据进行的抽象,包含了值的集合和操作1的集合

可分为:内部类型,用户自定义类型,抽象数据类型

数据类型聚合方式和举例

1.笛卡尔积:记录,结构        2.有限映射:数组        3.序列:字符串,顺序文件

4.递归:树        5.判定或:联合,变体记录        6.幂集:集合

类型检查:对数据对象的类型和使用的操作是否匹配的一致性检查

静态检查(编译时):程序是否正确有效

动态检查(运行时):变成方便,影响了可靠性

类型转换:将某种类型的值转换为另一种类型的值

隐式(自动)转换        显式(强制)转换

类型等价:T1和T2是两个类型,T1的任何值都可以赋予T2类型的变量,T1和T2是相容的,或等价的

词法分析

字母表:Σ,一个有穷符号的集合

字母表的乘积:Σ1Σ2={ab|a∈Σ1,b∈2}

字母表的幂运算:Σ的n次幂是n个Σ相乘

字母表的正闭包:Σ的各个正数次幂的并集

字母表的克林闭包:正闭包的基础上增加一个空串

Σ的克林闭包的每一个元素都可以称为Σ上的一个串,串s的长度|s|,是s中符号的个数

串上的运算

x和y的连接,是把y的内容放x的后面        x=dog y=house        xy=doghouse

假设x,y,z是三个字符串,如果x=yz,那么y是x的前缀,z是x的后缀

串的幂运算:串的n次方就是n个串相连

文法的定义:文法是描述语言语法结构的形式规则        G=(Vt,Vn,S,P)

Vt:终结符的非空有限集        Vn:非终结符的非空优先集

S:文法的开始符号,S∈Vn        P是产生式的非空有限集

终结符:只出现在推到右侧的符号        非终结符:在推导左侧出现过的符号

例子:

约定:在不影响阅读的情况下,可以只写产生式P

产生式的简写:产生式有相同左部的情况下,可将右侧合并,例如:

一般表示:

推导:用产生式的右部替换产生式的左部

规约:用产生式的左部替换产生式的右部

句型:经过推导后得到的产生式就是一个句型

句子:不包含非终结符的句型

语言:文法G包含的所有句子的集合

文法的分类:

正则表达式:描述正则语言的更紧凑的表示方法

例如:

正则的定义:

有穷自动机

转换图

接收:如果给一个输入串x,可以从初始状态到终止状态的方法,x被FA接收

由一个有穷自动机M接收的所有串的集合成为FA定于的语言,记为L(M)

最长子串匹配原则:当输入串的多个前缀与一个或多个模式匹配,总是选择最长的前缀进行匹配

如果是≤,此时都匹配上了,选择3作为终止状态

确定的有穷自动机(DFA)非确定的有穷自动机(NFA)

DFA(S,Σ,δ,s0,F)

S:有穷状态集        Σ:输入字母表(空串不是字母表的元素)

δ:δ(s,a)状态s对应的a的后继状态        s0:初始状态

F:终止状态

NFA(S,Σ,δ,s0,F)        从状态s出发,经过a路径到达的状态可能有多个

从正则表达式到有穷自动机

从NFA到DFA的转化

语法分析

自顶向下的分析(从文法的开始符号S推导出词串w的过程)

 推导树:有序的标记树

最左推导,总是从最左非终结符进行替换,得到的句型成为最左句型

最右推导,称为规范推导

文法的二义性:一个句子有两棵不同的推导树

在推导树中:

句型:叶结点自左向右连接        短语:子树便于是相对于根的短语

直接短语:有且仅有两层的子树的边缘时相对于根的直接短语

句柄:位于最左边的直接短语

消除递归的方法

1.公共左因子(提取公共左因子)A⇒aβ1|aβ2

  A⇒aβ1|aβ2|aβ3...|aβn|ξ

改写为A⇒aB|ξ

           B⇒β1|β2|β3|...|βn

若β1|β2|β3|...|βn中仍含有公共左因子,可以再次提取,直到所有产生式东渡没有公共左因子为止

例子:

2.直接左递归的消除

A⇒Aa1 |Aa2 |Aa3 |... |Aam |β1 |β2| β3 |... |βn

改写为:A⇒β1A` |β2A` | β3A` |... |βnA`

               A`⇒a1A` |a2A` |a3A`... |amA`| ε

例子:

3.间接左递归的消除

预测分析法

FIRST集合 

FOLLOW集合

SELECT集

LL(1)文法要保证同一非终结符的SELECT集互不相交

预测分析表的构建

对于文法G的每个产生式A⇒a        

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

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

相关文章

仪表放大器

仪表放大器AD623微小毫伏微伏电压放大器模块单端/差分单电源 屏蔽罩的添加: 仪表放大器常用于传感器信号的放大,例如应变计、压力传感器、温度传感器和生物电信号(如心电图、脑电图等)。这些传感器通常输出微弱的差分信号&#xf…

苹果删除的照片怎么找回?3个方法轻松找回

马有失蹄,人有失策,几乎大多数的苹果用户都遇到过“在翻看相册的时候,不小心删除了相册里的照片”的问题。但解决这个困境的高效方法,却很少人知道。那么,解决删除的照片怎么找回问题的高效方法有哪些呢?小…

VirtualBox 克隆已有的虚拟机

【前提】已经存在一个CentOS 7 虚拟机 【需求】克隆出来一个虚拟机,用于本机 【操作】 1.右击已有的虚拟机 -> 选择克隆 2.给新虚拟机起个名称 以及 生成新的MAC地址 3.克隆 4.修改网络和主机名称 # 修改网络编辑以下2个文件 vi /etc/sysconfig/network-scripts/ifcfg-enp…

电源模块启动过冲测试项目该如何在ATECLOUD中搭建?

ATECLOUD智能化测试平台是纳米软件独立开发的电测平台,使用ATECLOUD可以很轻松的搭建各类电源模块、电源芯片以及射频组件的测试方案以及项目,不仅方便快速,而且准确高效。今天就为大家实例说明一下如何在ATECLOUD平台搭建一个简单的电源测试…

鸿蒙开发之ArkUI 界面篇 十二 背景属性

backgroundColor背景色(纯颜色,没法实现立体感之类高级效果)、 backgroundImage背景图(一般是设计师设计好的图)、 backgroundImageSize背景图尺寸(用于调整背景图的尺寸)、 backgroundImagePosition背景图位置(用于调整背景图的位置)。 背景图的添加是属性backgrou…

【与C++的邂逅】--- C++的IO流

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 与C的邂逅 本篇博客我们来了解C中io流的相关知识。 🏠 C语言输入输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 sc…

4.C++面向对象1(类的定义,实例化,三大特性-封装)

⭐本篇文章为C学习第4篇,主要了解类和对象基础 ⭐本人C代码的Gitte仓库:yzc的c学习: 小川c的学习记录 - Gitee.com 、 ⭐我们知道面向对象有三大特性:封装,继承,多态,我们以类为基础进行…

linux hadoop-3.3.6 hbase-2.5.7

软件下载 hadoop https://dlcdn.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz 可以直接下载到本地,也可以直接下载进虚拟机中 如果速度较慢,可以用;另一个 wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common…

模电模块(一)

这个看起来功能挺全的,就是小贵,有时间自己做一个: 首页-康威科技-淘宝网 (taobao.com) 画一个集成板,集合上述模块的功能。

kubernetes架构

kubernetes cluster由master和node组成,节点上运行着若干kubernetes服务Master节点: master是kubernetes cluster的大脑,运行着的Daemon服务包括kube-apiserver,kube-scheduler,kube-controller-manager,etcd和Pod网络…

VBS学习1 - 语法、内置函数、内置对象

文章目录 概述执行脚本语法转义字符文本弹框msgbx定义变量dim(普通类型)定义接收对象set字符拼接&用户自定义输入框inputbox以及输入判断ifelse数组(参数表最大索引,非数组容量)有容量无元素基于元素确定容量 循环…

tidb 集群搭建

官网的搭建文档:使用 TiUP 部署 TiDB 集群 | TiDB 文档中心 我本地使用三台 centos7.9 服务器搭建,要保证三台服务器之间是可以互相通信的; 搭建集群的命令在其中一台服务器上执行即可; 1、安装tiup: curl --proto …

【接口测试】Postman--变量与集合

一、变量 ​ 变量这个概念相信大家都不陌生,因此在这里我们不介绍了。主要说一下在Postman中有哪几类变量,主要包括以下四类: Global(全局) Environment(环境) Local(本地&#xf…

[深度学习]Pytorch框架

1 深度学习简介 应用领域:语音交互、文本处理、计算机视觉、深度学习、人机交互、知识图谱、分析处理、问题求解 2 发展历史 1956年人工智能元年2016年国内开始关注深度学习2017年出现Transformer框架2018年Bert和GPT出现2022年,chatGPT出现&#xff0…

SHL笔试测评系统题库考什么?如何通过综合测评|附性格测试104道

嘿,各位求职小伙伴们!我是职小豚,今天就来带大家深入了解神秘又充满挑战的 SHL 笔试测评系统。 一、SHL 人才测评系统介绍 SHL 呀,那可是人才测评领域的超级大明星!就像一个智慧的魔法师,用各种神奇的题目…

ICP算法介绍,机器人姿态估计,三维点云配准

介绍 ICP算法,即Iterative Closest Point(迭代最近点)算法,是一种广泛应用于计算机视觉和图像处理领域的几何配准算法。它的主要目的是通过最小化两组点集之间的距离来找出一组变换,使得两组点集尽可能地对齐。ICP算法…

CDN方式的vant组件不能用,是因为标签要补成双标签

cdn方式的标签需要时双标签&#xff0c;单标签不能用 <van-fieldreadonlyclickable:value"formdata.yuyue_changguan"label"预约场馆"placeholder"点击选择预约场馆"click"showPicker true"></van-field><van-popup v…

spring springboot 日志框架

一、常见的日志框架 JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j.... 注意&#xff1a;SLF4j 类似于接口 Log4j &#xff0c;Logback 都是出自同一作者之手 JUL 为apache 公司产品 Spring&#xff08;commons-logging&#xff09;、Hibernate&#xff08;jboss…

配置环境-keil

配置keil -- 先将keil安装配置好&#xff0c;包括库 一、STM32 -- STM32是意法半导体&#xff08;意大利&#xff09;采用ARM公司设计的内核&#xff0c;设计一系列32位单片机芯片。 1、STM32开发的几种方式 2、STM32寄存器和库函数版本的工程创建 新建文件夹 复制相关文件…

Vmware虚拟机无法打开内核设备“\\.\Global\vmx86“的解决方法

我的问题是在一次系统更新后&#xff0c;导致虚拟机无法使用的。我的虚拟机只有方法三解决了问题。 一、方法一 以管理员身份打开cmd&#xff0c;依次执行以下命令&#xff1a; net start vmci net start vmx86 net start VMnetuserif二、方法二 按 WinR 键&#xff0c;运行…