编译原理

编译原理

编译的概念

编译:将高级语言(源语言)翻译成汇编语言或**机器语言(目标语言)**的过程。

编译的过程

编译过程的五个阶段:
1)词法分析:识别出源程序中的一个个单词符号(词法单元:token<种别码,属性值>)
2)语法分析:从词法分析器输出的token序列中识别出各类短语,并构造语法分析树
3)语义分析与中间代码生成: 语义分析——分析由语法分析器给出的语法单位的含义。中间代码:常用三地址码,记号系统,与机器指令较接近,易于转换成机器指令。
三地址指令序列唯一确定了运算完成的顺序。
4)优化:产生更高效的代码(对代码进行等价变换以求提高运行速度和节约存储空间)
①与机器无关的优化
②与机器有关的优化
5)目标代码生成:将中间代码变换成特定机器上的低级语言代码。
编译程序结构框图
表格与表格管理 功能:管理各种符号表(常数、标号、变量、过程、结构……)
·查、填(登记、查找)源程序中出现的符号和编译程序生成的符号,为编译的各个阶段提供信息
·辅助语法分析、语义分析等
·完成静态绑定、管理编译过程
Hash表、链表等各种查、填表技术
错误处理 (词法错误、语法错误、语义错误):编译程序应报告出错地点,并给出简明准确的提示信息

学习内容

编译的遍

遍(PASS):对输入文件(源程序或其等价的中间形式)从头到尾扫描一遍,并完成预定处理工作的过程。
输入文件–>遍–>输出文件
·除了第一遍的输入是源程序外,其他各遍扫描的输入均是上一遍扫描的输出。
·遍可以和阶段相对应,也可以无关
·扫描多少遍需要统筹考虑

编译程序的设计目标

翻译程序有编译程序(效率高、笔译)和解释程序(跨平台但效率低、口译(java:编译+解释))。
·正确性
·完备性
·可维护性
·可移植性

编译程序生成

表示语言翻译的T形图

在这里插入图片描述
表示语言:编译程序本身是一个程序,所以它是用某种语言描述的,称之为编译程序的“表示语言”。
·自展、滚雪球
·移植:交叉编译

利用编译程序自动生成器
词法分析器的自动生成程序----LEX
语法分析器的自动生成程序----YACC

程序设计语言及文法

语言概述

·交换信息的工具——功能性描述
·自然语言:人与人之间通讯工具、难以形式化
·计算机语言:计算机系统间、人机间通讯工具、易于形式化
·形式化就是能够用一套基于明确定义的数学概念的*符号(数学语言)*来书写
·机器要“掌握规则”:形式化描述
1.高度抽象
2.方便计算机表示
3.严格的理论基础

Chomsky定义了文法的形式,来形式化的描述语言。
·无穷语句的有穷描述、便于计算机处理

基本概念

字母表

·字母表ε是一个**有穷非空**符号集合
符号:字母、数字、标点符号……
相当于高级语言的基本字符表
eg.二进制字母表:{0,1}、ASCII字符集、Unicode字符集

字母表上的运算在这里插入图片描述

字母表的n次幂:长度为n的字符串构成的集合字母表的正闭包:长度正数的符号串构成的集合字母表的克林闭包:任意符号串(长度可以为零)构成的集合

串是字母表中符号的一个*有穷序列*
在这里插入图片描述
空串是长度为0的串,用ε表示
|ε|=0

串上的运算

连接

·如果x和y是串,那么x和y的连接是把y附加到x后面而形成的串,记作xy
·空串是连接运算的单位元,即,对于任何串s都有εs=sε=s
·单位元是集合里的一种特别的元,当它和其它元素结合时,并不会改变那些元素,若ae=a,e称为右单位元,若ea=a,e称为左单位元,若ae=ea=a,e称为单位元。
设x,y,z是三个字符串,如果x=yz,则称y是x的前缀,z是x的后缀。

在这里插入图片描述
串s的n次幂:将n个s连接起来

文法的定义

程序设计语言——形式化内容的提取
·字符(Character)
·单词(Token):满足词法规则的字符串
·语句(Sentence):满足语法规则的单词序列
·程序(Program):满足语法规则的语句序列
·程序设计语言:所有程序的集合

表示语言需要的四个要素

·非终结符,称为语法成分,不会出现在语句中
·开始符号
·终结符
·规则、产生式

文法的形式化定义

在这里插入图片描述四元组
·Vt:终结符集合。终结符文法所定义的语言的基本符号,字母表
·Vn:非终结符集合。非终结符是用来表示语法成分的符号,有时也成为**“语法变量”**
·P:产生式集合。产生式描述了将终结符和非终结符组合成串的方法
产生式的一般形式:α->β 读作:α定义为β
在这里插入图片描述
·S:开始符号。该文法中最大的语法成分。S∈Vn

推导和归约
句子和句型

一个句型中既可以包含终结符,有可以包含非终结符,也可能是个空串。
句子是不包含非终结符的句型。

文法的分类

0型文法
在这里插入图片描述

1型文法
在这里插入图片描述
CSG中不包含空产生式

2型文法
在这里插入图片描述在这里插入图片描述

3型文法(正则文法)
在这里插入图片描述

CFG的分析树

·推导的图形化表示

边缘(产出)

叶结点的标号既可以是非终结符也可以是终结符。从左到右排列叶节点得到的符号串成为是这棵树的产出或边缘。

(句型的)短语
给定一个句型,其分析树的每一棵子树的边缘成为该句型的一个短语。
直接短语

如果子树只有父子两代节点,那么这棵子树的边缘成为该句型的一个直接短语。

二义性文法
如果一个文法可以为某个句子生成多棵分析树,则称这个文法是二义性的。

·消歧规则

二义性文法的判定

对任意一个上下文无关文法,不存在一个算法,判定它是无二义性的,但能给出一组充分条件,满足这组充分条件的文法是无二义性的。
满足条件—>无二义性的
不满足—>无法判断

词法分析

词法分析(扫描)器的功能

功能:输入源程序,输出(单词)单词符号(token)。
即,把构成源程序的字符串转换成(单词)符号序列
单词符号的形式(token的形式)
·按照最小的语义单位设计
·通常表示为二元组:(单词符号种别,属性值)
单词符号表示(单词符号种别,属性值)
·种别
单词类型 种别码
关键字 一次一码
标识符 多词一码
常量 一型一码
运算符 一词一码 or一型一码
界限符 一词一码
在这里插入图片描述

单词的描述:词法的表示(RG,RE,FA)

在这里插入图片描述

正则表达式(RE/正规式)

对字符串操作的一种逻辑公式,用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”。用来表达对字符串的一种过滤逻辑。

正则语言的另一种描述,它更紧凑。
·运算优先级:*,连接,|
·()指定优先关系

定义

正则表达式可以由较小的正则表达式按照特定规则递归地构建。每个正则表达式r定义(表示)一个语言,记为L(r)。这个语言也是根据r的子表达式所表示的语言递归定义的。
在这里插入图片描述

C语言无符号整数的RE

`可以用RE定义的语言叫做正则语言或正则集合
RE代数定理
·|具有交换律、结合律
·“连接”具有结合律和对|的分配律
r+=rr*=r*r

正则定义
给一些RE命名,并在之后的RE中像使用字母表中的符号一样使用这些名字。

在这里插入图片描述

正则文法与正则表达式

正则表达式与正则文法等价
对任何正则文法G,存在定义同一语言的正则表达式r
对于任何正则表达式r,存在生成同一语言的正则文法G

正则表达式与正则文法的转换

在这里插入图片描述

有穷自动机(FA)

是正则语言的另一种等价描述
FA定义的语言

由一个有穷自动机M接收的所有的串构成的集合称为是该FA定义(或接收)的语言。记为L(M).

定义与分类

在这里插入图片描述

转换函数

DFA:
从状态s出发,沿着标记为a的边所能到达的状态
NFA:
从状态s出发,沿着标记为a的边所能到达的状态集合

转换表
状态/输入

NFA转换表:
在这里插入图片描述

nfa和dfa具有等价性,可以识别相同的语言

在这里插入图片描述

带有空边的nfa与不带空边的nfa具有等价性

词法分析阶段的错误处理

类型
单词拼写错误
非法字符
输入信息为空,未达终态,则调用**错误处理程序**
错误处理

·查找已扫描字符串中最后一个对应于某终态的字符
·找到,将该字符与其前面的字符识别成一个单词。然后将输入指针退回到该字符,扫描器重新回到初始状态,继续识别下一个单词
·没找到,确定出错,采用错误恢复策略

错误恢复策略

·最简单的错误恢复策略:“恐慌模式”恢复
·从剩余的输入中不断删除字符,直到词法分析器能够在剩余输入的开头发现一个正确的字符为止

词法分析器的设计与实现

实现过程

语法分析

检查扫描器输出的单词序列是否符合该语言的文法CFG——组成句子,并分析组成此句子的语法成分

输入:token序列
输出:
语法成分及组成
表现形式:语法树
错误报告

自顶向下的语法分析

·从分析树的顶部(根节点)向底部(叶节点)方向构造分析树
·可以看成是从文法开始符号S推导出词串w的过程

最左推导

总选择每个句型的最左非终结符进行替换

在这里插入图片描述
最左推导 对应 最右归约

最右推导

总选择每个句型的最右非终结符进行替换
最右推导 对应 最左归约

自底向上的分析中:规范归约为最左归约 规范推导为最右推导
自顶向下的语法分析采用的是最左推导的方式

最左推导和最右推导都具有唯一性

语法分析方法

推导/派生 自顶向下 (文法产生语言)
归约 自底向上 (自动机识别语言)

自顶向下的语法分析面临的问题

二义性

改造方法

引入语法变量,使文法含有更多的信息
LL文法和LR文法都是无二义性的

回溯

同一非终结符的多个候选式存在共同前缀,将导致回溯现象(发现不匹配,需要回退)

左递归

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

左递归的消除

将间接左递归变为直接左递归,消除直接左递归
方法

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

提取左因子

通过改写产生式来推迟决定,等读入足够多的输入,再做选择

在这里插入图片描述

总结实现自顶向下分析的文法要求

·无二义性
·不含左递归
·最好没有回溯问题
候选式的确定与回溯

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值