编译原理
2020-12-22 19:25:49 0 举报
AI智能生成
编译原理复习导图
作者其他创作
大纲/内容
总论
程序设计语言的定义
程序设计语言的四个方面
语法
语义
语用
语境
程序的执行
高级语言的执行方式
解释方式
对程序语言逐个地进行分析,根据每个语句的含义模拟执行
翻译方式
对程序整个进行分析,翻译成等价机器语言(或汇编语言)程序,然后执行
源语言
写源程序的语言
源程序
用某种程序设计语言所写的程序
目标程序
等价的低级语言程序
目标语言
目标程序相应的低级语言
汇编程序
当源语言是汇编语言时翻译程序是汇编程序
汇编程序把汇编语言程序翻译成等价的机器语言程序
编译程序
当源语言是Pascal、Fortran或C等高级语言时的翻译程序特称为编译程序
把高级语言程序翻译成等价的低级语言目标程序
编译程序的构造
前端-完成分析
词法分析
根据词法规则识别出具有独立意义的各各个语法单位——符号(单词),并把它们转化为通常是等长的内部形式(属性字),以供下一阶段语法分析阶段使用
语法分析
读入由词法分析程序识别出的符号,根据给定的语法规则,识别出各个语法结构,同时也检查了语法的正确性
语义分析
完成确定类型、类型检查、识别含义与相应的语义处理,并进行一些静态语义检查
后端-完成综合
代码优化
编译时为了改进目标代码质量而进行的各项工作
书p10
目标代码生成
可以在语义分析时生成,如果语义分析的结果是中间表示代码,就必须把中间表示代码变换成等价的目标程序,即目标语言代码
遍的概念
把一个编译程序的工作分为若干个阶段来完成,每个阶段整个读入并进行处理的过程称为遍
书p11
形式语言理论与编译实现技术
程序设计语言与形式语言理论紧密相关,依据形式语言理论,编译程序的词法分析与语法分析等不同阶段可以采用最适合的分析技术
本章概要 ★
书p15
文法与语言
字母表的闭包与正闭包
字母表A的闭包
A*=Aº∪A¹∪A²∪...∪Aⁿ∪...
字母表A的正闭包
A⁺=A¹∪A²∪...∪Aⁿ∪...
A*=A⁺∪Aº,且A⁺=AA*=A*A
某个字母表上的语言是该字母表的正闭包的子集,且是真子集
文法与语言的形式定义
一个重写规则是一个有序对(U,u)。写作U::=u
文法的定义
文法G[Z]是有穷非空的重写规则集合,其中Z是识别符号,而G是文法名
给定一个文法G,它的一切非终结符号所组成的集合通常记为V៷,它的一切终结符号所组成的集合通常记做Vₜ。显然Vₜ∩V៷=∅
应用文法产生语言句子
设G[Z]是一文法,如果符号串x是从识别符号Z推导所得的,即Z=>* x x∈V⁺,则称符号串x是该文法G的一个句型。如果一个句型x仅由终结符号所组成,即Z=>* x x∈Vₜ⁺,则称该句型x为该文法的句子或一个字
短语
G[Z]是一个文法,w=xuy是该文法的一个句型,如果有Z=>* xUy,U∈V៷,且U=>+ u,u∈V⁺,则称u是句型w中相对于U的短语
ps.求短语与简单短语就画树来求
简单短语
如果满足Z=>* xUy,且U=>u,则称u是句型w中相对于U的简单短语
句柄
一个句型的最左简单短语
语言的形式定义
L(G[Z])={x|Z=>* x,且x∈Vₜ⁺}
如果一个规则形如U::=...U...,则称该规则是递归的;如果规则形如U::=U...,则称左递归的;如果形如U::=...U,则称右递归的。
语言的分类
四元组
Chomsky文法G是一个四元组(V៷,Vₜ,P,Z)
V៷是非终结符号集
Vₜ是由终结符号组成的字母表
P是有穷非空的重写规则集
Z是识别符号,Z∈V៷
几型文法
2型文法
对于文法G,P中每个规则具有下列形式:U::=u其中U∈V៷,u∈V⁺,则称该文法G为2型文法或上下文无关文法,缩写CFG
3型文法
对于某文法G,P中的每个规则具有下列形式:U::=T 或 U::=WT 其中T∈Vₜ,U、W∈V៷,则称该文法G为3型文法或正则型文法,有时又称有穷状态文法,缩写RG
文法有关的资料:https://blog.csdn.net/m0_37154839/article/details/80086482
文法等价与等价变换
规则左递归的消去
改写规则左递归为右递归
书p51
沿用扩充BNF范式
书p52
语法分析树与句型分析
子树的末端结点符号串是相对于子树根的短语
句型分析
分析技术
自顶向下的分析技术
从识别符号出发,试图由它推导出与输入符号串相同的终结符号串
自顶向下识别过程是一个不断建立直接推导的过程
自底向上的分析技术
从输入符号串出发,试图把它规约成识别符号
自底向上分析过程是一个不断进行直接规约的过程
本章概要★
书p65
词法分析
引言
词法分析执行功能
读入源程序字符串
识别开具有独立含义的最小语法单位——单词
把单词变换成长度同一且为定长的属性字
删除注解空格等无效字符,进行某些预加工处理
词法分析基于规则的形式
U::=T
U::=WT
正则表达式与有穷状态自动机
为了识别标识符,画出流程图
书p71-图3-1
状态转换图
书p72-图3-3
S为开始态,双圈为终止态
确定有穷状态自动机DFA
一个确定的有穷状态自动机DFA是五元组(K,∑,M,S,F)
K是有穷非空的状态集合
∑是有穷非空的输入字母表
M是从K×∑到K的映象。如果M(R,T)=Q,则输入字符为T时,当前状态R将转到状态Q,Q成为下一当前状态
S是开始状态,S∈K
F是非空终止状态集合,F⊆K
对于某个DFA D=(K,∑,M,S,F),如果M(S,t)=P,P∈F,则称字符串t可被该DFA D所接受
参考书p76 例3.3
有穷状态自动机接受的字符串集合称为正则集
如果句子x属于正则文法G,则它能为G的相应FA所接受;反之,对于任何FA D存在一个正则文法G,G的句子正是该FA D所能接受的那些字符串
非确定有穷状态自动机NFA
NFA与DFA的区别
NFA可以有若干个开始状态,DFA仅一个
NFA的M是从K×∑到K的子集所组成集合的映象,而不是到K的映象,即映象M将产生一个状态集合(可能为空集),而不是单个状态
从NFA产生DFA 书p83
把一切开始状态S₁,S₂,S₃,...,Sₘ合并为一个新的开始状态[S₁,S₂,S₃,...,Sₘ]
从新开始状态出发,列表求出其他一切新状态
以状态名中包含原来终止状态名的一切新状态作为新终止状态
构造DFA N`
设A与A`是两个有穷状态自动机,如果L(A)=L(A`),即接受相同语言,则称这两个有穷状态自动机A与A`等价
确定有穷状态自动机的化简 书p85
构造状态集的划分,直到不再能有新的划分产生,--终止态与非终止态
取每一组中的一个状态作代表,删去其他一切等价的状态,则所有这些状态代表构成化简了的DFA A`的状态集合
如果A`中有死状态与无用状态一概删去,从其他状态到这些状态的转化都成为无定义的
死状态为输入任何字符a都转化到本身而不能从它达到终止状态的那些非终止状态
无用状态为不可能从开始状态达到的状态
正则表达式
设有字母表∑。∑上的正则表达式递归地定义
ε与∅都是∑上的正则表达式,这里ε是空串,而∅是空集
对于任何的a∈∑,a是∑上的正则表达式
如果e₁与e₂是∑上的正则表达式,则(e₁)、e₁e₂、e₁|e₂与{e₁}都是∑上的正则表达式
如果两个正则表达式e₁与e₂表示的正则集相同,即值相等,则称它们是等价的。记为e₁=e₂
正则表达式的性质
零正则表达式
e|∅=∅|e=e e∅=∅e=∅
单位正则表达式
ε:εe=eε=e
交换律
e₁|e₂=e₂|e₁
结合律
e₁|(e₂|e₃)=(e₁|e₂)|e₃
e₁(e₂e₃)=(e₁e₂)e₃
分配律
e₁(e₂|e₃)=e₁e₂|e₁e₃
(e₁|e₂)e₃=e₁e₃|e₂e₃
正则表达式与有穷状态自动机的等价性
书p88
本章概要★
书p115
语法分析——自顶向下分析技术
引言
上下文无关文法是描述嵌套结构的有效手段
带回溯的自顶向下分析技术(不重要)
书p121
自顶向下分析技术是不能应用于左递归文法的
无回溯的自顶向下分析技术
递归下降分析技术
p125
先决条件
无左递归
无回溯
预测分析技术
FIRST(u)={T|u=>* T...,T∈Vₜ},特别地,如果u=>* ε,则规定ε∈FIRST(u)
FOLLOW(U)={T|Z=>* ...UT...,T∈Vₜ∪{#}},特别地,如果Z=>* ...U,则规定#∈FOLLOW(U)
构造FIRST(u)
如果X∈Vₜ,则FIRST(X)={X}
如果X∈V៷,并存在规则X::=T...,T∈Vₜ,则把T添入FIRST(X),如果存在规则X::= ε,则把 ε也添入其中
如果存在规则X::=X₁X₂...Xₖ,则对于满足下列条件的一切i(1≤i≤k),把FIRST(Xᵢ)中的每一个非ε符号添入FIRST(X)。该条件是:X₁,...Xᵢ₋₁都是非终结符号,且FIRST(Xⱼ),包含ε,j=1,2,...,i-1(即X₁X₂...Xᵢ₋₁=>* ε)。如果ε∈FIRST(Xⱼ),j=1,2,...,k,则把ε添入FIRST(X)
构造FOLLOW(U)
#∈FOLLOW(Z),Z是文法识别符号
如果存在规则U::=xWy,则FIRST(y)中除ε外的一切符号都属于FOLLOW(W),其中W∈V៷
如果存在规则U::=xW或U::=xWy,其中FIRST(y)包含ε(即y=>* ε),则FOLLOW(U)中的一切符号都属于FOLLOW(W),其中W∈V៷
预测分析表构造算法
对文法的每个规则U::=u,执行步骤2与步骤3
对每个终结符号a∈FIRST(u),让A[U][a]='U::=u'
如果ε∈FIRST(u),则对FOLLOW(U)中的每个终结符号b或#,让A[U][b]='U::=u'或A[U][#]='U::=u'
把A的每个未定义元素置为ERROR(用空白表示)
本章概要★
书p142
语法分析——自底向上分析技术
引言
规范分析
最左规约
每步被规约的总是最左的简单短语
最右归约
要解决的基本问题
如何找出进行(直接)规约的(简单)短语
把所找出的(简单)短语(直接)规约到哪一个非终结符号
基本实现方法
移入-规约法
动作
移入
归约
接受
报错
算符优先分析技术
构造算符优先关系
⊜
容易构造,查看一切规则的右部,是否包含TⱼTᵢ或TⱼVTᵢ形式的字符号串
书p153
小于
书p152
大于
构造算符优先表
书p150,定义5.2
质短语
它至少包含一个终结符号,且除它自身外不再包含其他质短语
LR(K)分析技术
技术的提出
在寻找质短语的过程中,不仅要向前查看未扫描到的输入符号,还得回头去考虑先前的判定,因此不能说是严格从左到右
LR(k)的含义
可以以k为界从左到右地翻译的,也即识别过程中每步向前看k个符号
LR分析技术的应用
能应用于几乎所有能用上下文无关文法描述的程序设计语言,并能借助于识别程序自动生成程序来自动生成文法的识别程序
LR(k)的若干性质
书p172
LR(k)分析技术的评价
LR识别程序能识别几乎所有能用上下文无关文法描述的程序设计语言结构,而且对于通常的程序设计语言,一般只需K=1
LR分析技术比较算符优先分析技术,或基于移入-归约法的任何其他分析技术都更一般,适用面更广,却能以同样的功效来实现。它也比通常的不带回溯的自顶向下分析技术好。我们的对比试验表明,与LL(1)分析技术相比较,对同一个输入符号串进行句型分析,LR(1)的归约步数比LL(1)的少1/3左右
LR识别程序在从左到右地扫描输入符号串时,输入符号串一中有语法错误出现,它就能由LR识别程序察觉。LR识别程序中易于加入错误复原设施或其他出错处理设施
便于识别程序的自动构造
本章概要★
书p210
语义分析与目标代码生成
概况
语义分析基本工能
确定类型
类型检查
识别含义,并作相应的语义处理
其他一些静态语义检查
语义是上下文有关的
语法制导 书p216
属性文法
AG是一个四元组(G,A,R,C)
G是压缩了的上下文无关文法(V៷,Vₜ,P,Z)
A是有穷属性集
R是有穷属性规则集
C是有穷条件集
一个语法制导定义,其中仅仅使用综合属性,则称该语法制导定义为S_属性定义
抽象语法树
书p297
逆波兰式
书p300
四元式
书p306
本章概要★
书p316
代码优化
引言
优化的概念
编译时刻为改进目标程序的质量而进行的各项工作。
改进质量提高两方面的效率
时间效率
空间效率
优化代码的分类
与机器相关性
机器相关优化
寄存器优化
多处理器优化
特殊指令优化
无用指令消除
机器无关优化★
基本块优化
循环优化
优化范围
局部优化
考察一个基本块中的四元式序列就可以完成的优化
基本块优化
合并常量计算
消除公共子表达式
削减计算强度
删除无用代码
全局优化
对循环的优化
循环不变表达式外提
归纳变量删除
计算强度削减
优化语言级
对中间表示代码进行优化
对目标语言代码进行优化
窥孔优化
在很小的局部范围内无需花费太大代价就可以进行的目标代码级优化
代码优化程序的结构
控制流分析
识别出循环
数据流分析
进行数据流信息的收集
变换
对中间表示代码逐个进行分析,在基本块内进行局部等价变换,并基于控制流分析和数据流分析所获得的信息进行等价变换,从而实现循环的优化和其他全局优化
基本块与流图
基本块的概念
一个连续的四元式序列,即控制流从其第一个四元式进入,而从其最后一个四元式离开,其间没有停止也不可能有分支
基本块的优化
见上方
本章概要
书p398
0 条评论
下一页