《编译原理》复习要点.docx

上传人:b****5 文档编号:5044930 上传时间:2022-12-12 格式:DOCX 页数:23 大小:85.78KB
下载 相关 举报
《编译原理》复习要点.docx_第1页
第1页 / 共23页
《编译原理》复习要点.docx_第2页
第2页 / 共23页
《编译原理》复习要点.docx_第3页
第3页 / 共23页
《编译原理》复习要点.docx_第4页
第4页 / 共23页
《编译原理》复习要点.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

《编译原理》复习要点.docx

《《编译原理》复习要点.docx》由会员分享,可在线阅读,更多相关《《编译原理》复习要点.docx(23页珍藏版)》请在冰豆网上搜索。

《编译原理》复习要点.docx

《编译原理》复习要点

考试安排:

7 月 13 日(20 周周三),15:

00-17:

00,20208

填空 10X1 分、选择 10X2 分、简答 4X5 分、大题 5X10 分

考试大题:

循环优化

LL

(1).定义之类的

算符优先算法

自下而上分析法(20 分,选择、填空、大题)

 

第一章 引论

一.编译程序(compiler):

把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)

的程序

二.编译程序的工作的五个阶段:

词法分析、语法分析、中间代码产生、优化、目标代码产生

1. 词法分析

任务:

 输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单

词符号。

依循的原则:

构词规则

Pascal 语言

描述工具:

有限自动机

FORI:

=1TO100DO

保留字 标识符 等符  整常数 保留字 整常数  保留字

2. 语法分析

任务:

在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法

单位。

依循的原则:

语法规则

述工具:

上下文无关文法

3. 语义分析与中间代码产生

任务:

对各类不同语法范畴按语言的语义进行初步翻译。

(变量是否定义、类型

是否正确等)

依循的原则:

语义规则

中间代码:

三元式,四元式,逆波兰记号,树形结构等。

是一种独立于具体硬件

的记号系统。

例:

将 Z:

=X + 0.618 * Y 翻译成四元式为

(1)*0.618YT1

(2)+XT1T2

(3)  :

=T2_Z

4. 优化

任务:

对于前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效

的目标代码。

依循的原则:

程序的等价变换规则

FOR K:

=1 TO 100 DO

BEGIN

M :

= I + 10 * K;

N :

= J + 10 * K;

END

4. 目标代码产生

任务:

 把中间代码变换成特定机器上的目标代码。

依赖于硬件系统结构和机器指令的含义

目标代码三种形式:

a)绝对指令代码:

 可直接运行

b)可重新定位指令代码:

 需要连接装配

c)汇编指令代码:

 需要进行汇编

三.  编译程序结构

◆ 编译程序总框 (简答题 5 分)

 

第二章 高级语言及其语法描述

2.1.1 语法

词法规则:

单词符号的形成规则。

a) 单词符号是语言中具有独立意义的最基本结构。

一般包括:

常数、标识符、

基本字、算符、界符等。

b) 描述工具:

正规式和有限自动机

语法规则:

语法单位的形成规则。

a)  语法单位通常包括:

表达式、语句、分程序、过程、函数、程序等;

c) 描述工具:

上下文无关文法

2.1.2 语义

语义:

一组规则,用它可以定义一个程序的意义。

描述方法:

a)自然语言描述:

隐藏错误、二义性和不完整性

b) 形式描述:

☞无二义性

☞ 完整性

多数语言中,算符的优先顺序如下:

◆ 乘幂(**或↑)

◆ 一元负(-)

◆ 乘、除

◆ 加、减

◆ 关系符(<,=,>,<=,>=,<>)

◆ 非(¬,not)

◆ 与(Λ,&,and )

◆ 或(˅,|,or,)

 

 

不同的语言对算符优先级

的规定有差异,甚至差异

很大!

◆ 隐含(或 imp)

◆ 等值(或 epui,或~)

2.3 程序语言的语法描述

1. 几个概念:

a)考虑一个有穷 字母表∑ 字符集

b) 其中每一个元素称为一个字符

c)∑上的字(也叫字符串) 是指由∑中的字符所构成的一个有穷序列

d) 不包含任何字符的序列称为空字,记为ε

e) 用∑*表示∑上的所有字的全体,包含空字ε

例如:

 设 ∑={a, b},则 ∑*={ε,a,b,aa,ab,ba,bb,aaa,...}

f)∑*的子集 U 和 V 的连接(积)定义为 UV={ αb | α∈U & b∈V }

例如:

 设:

U={ a, aa } ,V= { b, bb } 那么:

UV= { ab, abb, aab,

aabb}

g)V 自身的 n 次积记为 Vn=VV…V

h) 规定 V0={ε},令 V*=V0∪V1∪V2∪V3∪… 称 V*是 V 的闭包;

记 V+=VV* ,称 V+是 V 的正规闭包。

例如:

 设:

U={ a, aa }

那么:

U* = { ε , a, aa, aaa, aaaa, …}

U+ = { a, aa, aaa, aaaa, …}

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

产生式形如:

α → β

其中:

α∈ (VT ⋃ VN)*且至少含有一个非终结符;β∈ (VT ⋃ VN)*

任何 0 型语言都是递归可枚举的。

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

产生式形如:

α → β

其中:

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

意味着对非终结符进行替换时务必考虑上下文,并且,一般不允许替换成

空串ε 。

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

产生式形如:

A → β

其中:

A∈ VN;β∈ (VT ⋃ VN)*。

非终结符的替换可以不必考虑上下文。

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

产生式形如:

 A → αB 或 A → α

右线性文法

其中:

 α∈ VT*;A,B∈VN

产生式形如:

 A → Bα 或 A → α

其中:

 α∈ VT*;A,B∈VN

正规文法的能力要比上下文无关文法弱得多。

左线性文法

 

四种类型描述能力比较

m) 上下文无关文法的定义:

一个上下文无关文法 G 是一个四元式

G=(VT,VN,S,P),其中

VT:

终结符集合(非空)

VN:

非终结符集合(非空),且 VT ⋂ VN=∅

S:

文法的开始符号,S∈VN

P:

产生式集合(有限),每个产生式形式为

P→α, P∈VN, α ∈ (VT ⋃ VN)*

开始符 S 至少必须在某个产生式的左部出现一次。

例:

文法 G1(A):

 A → c|Ab

G1(A)的语言?

解:

L(G1)={c,cb,cbb,⋯},以 c 开头,后继若干个 b

n)定义:

如果一个文法存在某个句子对应两颗不同的语法树,则说这个文法

是二义的。

G(E):

 E → i|E+E|E*E|(E) 是二义文法。

o) 语言的二义性:

一个语言是二义性的,如果对它不存在无二义性的文法。

可能存在 G 和 G’,一个为二义的,一个为无二义的。

但 L(G)=L(G’)

2. 状态转换图

a) 概念:

状态转换图是一张有限方向图。

b) 结点代表状态,用圆圈表示。

c) 状态之间用箭弧连结,箭弧上的标记(字符)代表射出结状态下可能出现的输

入字符或字符类。

d) 一张转换图只包含有限个状态,其中有一个为初态,至少要有一个终态

3. 正规运算符优先顺序

在不致混淆时,括号可以省去,但规定算符的优先顺序为:

*(闭包).(连接)|(或)

4.  3 型文法-正规式

G 的任何产生式为 A → αB 或 A → α

其中:

 α∈ VT*;A,B∈VN

3 型文法等价于正规式,所以也称正规文法。

3.3.2 确定有限自动机(DFA)

对状态图进行形式化,则可以下定义:

自动机 M 是一个五元式 M=(S, ∑, f, S0, F),其中:

a) S:

 有穷状态集,

b) ∑:

输入字母表(有穷),

c) f:

 状态转换函数,为 S⨯∑→S 的单值部分映射,f(s,a)=s’表示:

当现行状态为 s,输入字符为 a 时,将状态转换到下一状态 s’。

们把 s’称为 s 的一个后继状态。

d) S0∈S 是唯一的一个初态;

e) F⊆S :

终态集(可空)。

例如:

DFA  M=({0,1,2,3},{a,b},f,0,{3}), 其中:

f 定义如下:

f(0,a)=1f(0,b)=2

f(1,a)=3f(1,b)=2

f(2,a)=1f(2,b)=3

f(3,a)=3f(3,b)=3

 

3.3.3 非确定有限自动机(NFA)

定义:

一个非确定有限自动机(NFA) M 是一个五元式 M=(S, ∑, f, S0, F),其中:

1  S:

 有穷状态集;

2  ∑ :

输入字母表(有穷);

3  f:

 状态转换函数,为 S⨯∑*→2S 的部分映射(非单值);

4 S0⊆S 是非空的初态集;

5 F ⊆S :

终态集(可空)。

从状态图中看 NFA 和 DFA 的区别:

1 弧上的标记可以是∑*中的一个字,而不一定是单个字符;

2 同一个字可能出现在同状态射出的多条弧上。

DFA 是 NFA 的特例。

定义:

对于任何两个有限自动机 M 和 M’,如果 L(M)=L(M’),则称 M 与 M’等价。

自动机理论中一个重要的结论:

判定两个自动机等价性的算法是存在的。

对于每个 NFA M 存在一个 DFA M’,使得 L(M)=L(M’)。

亦即 DFA 与 NFA 描述能力

相同。

把上述 NFA 确定化——采用子集法.

设 I 是 M’的状态集的一个子集,定义 I 的ε-闭包ε-closure(I)为:

i) 若 s∈I,则 s∈ε-closure(I);

ii) 若 s∈I,则从 s 出发经过任意条ε弧而能到达的任何状态 s’都属于ε-

closure(I)

即 ε-closure(I)=I⋃{s’|从某个 s∈I 出发经过任意条ε弧能到达 s’}

例:

设 a 是∑中的一个字符,定义 Ia= ε-closure(J)

其中,J 为 I 中的某个状态出发经过一条 a 弧而到达的状态集合。

 

3.3.4 正规文法与有限自动机的等价性

定理:

1.对每一个右线性正规文法 G 或左线性正规文法 G,都存在一个有限自动机(FA)

M,使得 L(M)=L(G)。

2.对每一个 FA M,都存在一个右线性正规文法 GR 和左线性正规文法 GL,使得 L(M)

=L(GR)=L(GL)。

3.3.5正规式与有限自动机的等价性

定理:

1. 对任何 FA M,都存在一个正规式 r,使得 L(r)=L(M)。

2. 对任何正规式 r,都存在一个 FA M,使得 L(M)=L(r)。

2 对转换图概念拓广,令每条弧可用一个正规式作标记。

(对一类输入符号)

3.3.6 确定有限自动机的化简

◆ 对 DFA M 的化简:

寻找一个状态数比 M 少的 DFA M’,使得 L(M)=L(M’)

◆ 假设 s 和 t 为 M 的两个状态,称 s 和 t 等价:

如果从状态 s 出发能读出某个字α而

停止于终态,那么同样,从 t 出发也能读出α而停止于终态;反之亦然。

◆ 两个状态不等价,则称它们是可区别的。

◆ 对一个 DFA M 最少化的基本思想:

把 M 的状态集划分为一些不相交的子集,使得任何两个不同子集的状态是可区别的,而

同一子集的任何两个状态是等价的。

最后,让每个子集选出一个代表,同时消去其他状

态。

 

I

(1)={0, 1, 2}I

(2)={3, 4, 5, 6}

Ia

(1) ={1, 3}

I(11) ={0, 2}I(12) ={1} I

(2)={3, 4, 5, 6}

I(11) ={0, 2}

Ia(11) ={1} Ib(11) ={2, 5}

I(111) ={0}I(112) ={2} I(12) ={1} I

(2)={3, 4, 5, 6}

Ia

(2) ={3, 6}Ia

(2) ={4, 5}

 

第四章 语法分析——自上而下分析

◆ 语法分析的方法:

◆ 自下而上分析法(Bottom-up)

◆ 自上而下分析法(Top-down)

◆ 基本思想:

它从文法的开始符号出发,反复使用各种产生式,寻找

"匹配"的推导。

◆ 递归下降分析法:

对每一语法变量(非终结符)构造一个相应的子程

序,每个子程序识别一定的语法单位,通过子程序间的信息反馈和

联合作用实现对输入串的识别。

◆ 预测分析程序

☞ 优点:

直观、简单和宜于手工实现。

4.3  LL

(1)分析法

◆ 构造不带回溯的自上而下分析算法

◆ 要消除文法的左递归性

◆ 克服回溯

4.3.1  左递归的消除

◆ 直接消除见诸于产生式中的左递归:

假定关于非终结符 P 的规则为

P→Pα | β

其中β不以 P 开头。

我们可以把 P 的规则等价地改写为如下的非直接左递归形式:

P→βP'

P'→αP'|ε

◆ 一般而言,假定 P 关于的全部产生式是

左递归变右递归

P→Pα1 | Pα2 | … | Pαm | β1 | β2|…|βn

其中,每个α都不等于ε,每个β都不以 P 开头

那么,消除 P 的直接左递归性就是把这些规则改写成:

P→β1P' | β2P' | … | βnP'

P'→α1P' | α2P' |… | αmP' | ε

◆ 提取公共左因子:

假定关于 A 的规则是

A→δβ 1 | δβ 2 | …| δβ n | γ 1 | γ 2 | … | γm(其中,每个γ 不以δ开

头)

那么,可以把这些规则改写成

A→δA' | γ 1 | γ 2 | … | γ m

A'→β 1 | β 2 | … | β n

◆ 经过反复提取左因子,就能够把每个非终结符(包括新引进者)的所有候选首符集变

成为两两不相交。

4.3.3  LL

(1)分析条件

◆ 假定 S 是文法 G 的开始符号,对于 G 的任何非终结符 A,我们定义

*

FOLLOW(A) = {a | S ⇒ ...Aa...,a ∈ VT }

*

特别是,若 S ⇒∙ ∙ ∙ A ,则规定#∈FOLLOW(A)

⏹构造不带回溯的自上而下分析的文法条件

1. 文法不含左递归,

2. 对于文法中每一个非终结符 A 的各个产生式的候选首符集两两不相交。

即,若

A→α 1|α 2|…|α n

则  FIRST(α i)∩FIRST(α j)=φ(i≠j)

i=1,2,...,n

3. 对文法中的每个非终结符 A,若它存在某个候选首符集包含ε,则

FIRST(A)∩FOLLOW(A)=φ

如果一个文法 G 满足以上条件,则称该文法 G 为 LL

(1)文法。

 

第五章 语法分析——自下而上分析

语法分析的方法:

自下而上分析法(Bottom-up)

◆ 基本思想:

从输入串开始,逐步进行“归约”,直到文法的开始符

号。

即从树末端开始,构造语法树。

所谓归约,是指根据文法的产

生式规则,把产生式的右部替换成左部符号。

◆ 算符优先分析法:

按照算符的优先关系和结合性质进行语法分析。

适合分析表达式。

◆ LR 分析法:

规范归约

5.1.2规范归约

1.定义:

令 G 是一个文法,S 是文法的开始符号,假定αβδ是文法 G 的一个句型,

如果有

*+

且 S ⇒ αAδ , A ⇒ β

则称β是句型αβδ相对于非终结符 A 的短语。

特别是,如果有 A⇒β,则称β是句型αβδ相对于规则 A→ β的直接短语。

一个句型的

最左直接短语称为该句型的句柄。

2.归约

采用“移进-归约”思想进行自下而上分析。

基本思想:

用一个寄存符号的先进后出栈,把输入符号一个一个地移进到栈里,

当栈顶形成某个产生式的候选式时,即把栈顶的这一部分替换成(归约为)该产生式的左部

符号。

5.2  算符优先分析

◆ 四则运算的优先规则:

先乘除后加减,同级从左到右

◆ 考虑二义文法文法 G(E):

G(E):

 E → i| E+E|E-E|E*E|E/E|(E)

◆ 它的句子有几种不同的规范规约。

◆ 归约即计算表达式的值。

归约顺序不同,则计算的顺序也不同,结果也不一样。

◆ 如果规定算符的优先次序,并按这种规定进行归约,则归约过程是唯一的。

◆ 起决定作用的是相邻的两个算符之间的优先关系。

◆ 所谓算符优先分析法就是定义算符之间的某种优先关系,借助于这种关系寻找“可

归约串”和进行归约。

5.2.1  算符优先文法及优先表构造

◆ 一个文法,如果它的任一产生式的右部都不含两个相继(并列)的非终结符,即不含

如下形式的产生式右部:

…QR…

则我们称该文法为算符文法。

◆ 约定:

◆ a、b 代表任意终结符;

◆ P、Q、R 代表任意非终结符;

◆ ‘…’代表由终结符和非终结符组成的任意序列,包括空字。

◆ 假定 G 是一个不含ε-产生式的算符文法。

对于任何一对终结符 a、b,我们说:

1. a=b当且仅当文法 G 中含有形如 P→…ab…或 P→…aQb…的产生式;

++

2. a

++

3. a>b当且仅当 G 中含有形如 P→…Rb…的产生式,而 R ⇒ …a 或 R ⇒ …aQ。

⏹如果一个算符文法 G 中的任何终结符对(a,b)至多只满足下述三关系之一:

a=b,

ab。

 则称 G 是一个算符优先文法。

◆ 从算符优先文法 G 构造优先关系表的算法。

◆ 通过检查 G 的每个产生式的每个候选式,可找出所有满足 a=b 的终结符对。

◆ 确定满足关系<和>的所有终结符对:

◆ 首先需要对 G 的每个非终结符 P 构造两个集合 FIRSTVT(P)和 LASTVT(P):

++

FIRSTVT (P) = {a | P ⇒ a ∙ ∙∙, P ⇒ Qa ∙ ∙∙, a ∈VT Q ∈VN }

++

a

++

LASTVT(P ) = {a | P ⇒∙ ∙ ∙ a 或P ⇒∙ ∙ ∙ aQ ,a ∈ VT 而Q ∈ VN }

++

a>b当且仅当 G 中含有形如 P→…Rb…的产生式,而 R ⇒ …a 或 R ⇒ …aQ。

❑ 有了这两个集合之后,就可以通过检查每个产生式的候选式确定满足关系<和>的所

有终结符对。

Ø 假定有个产生式的一个候选形为…aP…

那么,对任何 b∈FIRSTVT(P),有 a

Ø 假定有个产生式的一个候选形为…Pb…

那么,对任何 a∈LASTVT(P),有 a>b。

◆ 按其定义,可用下面两条规则来构造集合 FIRSTVT(P):

1. 若有产生式 P→a…或 P→Qa…,则 a∈FIRSTVT(P);

2. 若 a∈FIRSTVT(Q),且有产生式 P→Q…,则 a∈FIRSTVT(P)。

练习:

P133-2

① 计算它的 FIRSTVT 和 LASTVT;

② 计算 G 的优先关系 。

并确定 G 是否是一个算符优先文法?

 

◆ LR 分析方法:

把"历史"及"展望"综合抽象成状态;由栈顶的状态和现行的输入符

号唯一确定每一步工作

 

◆ LR 分析器的核心是一张分析表:

◆ ACTION[s,a]:

当状态 s 面临输入符号 a 时,应采取什么动作.

◆ GOTO[s,X]:

状态 s 面对文法符号 X 时,下一状态是什么

◆ 文法 G 的每个产生式的右部添加一个圆点称为 G 的 LR(0)项目

例:

如:

A→XYZ 有四个项目:

A→.XYZA→X.YZA→XY.ZA→XYZ.

☞ A→α . 称为"归约项目"

☞ 归约项目 S’→α . 称为"接受项目"

☞ A→α .aβ (a∈VT) 称为"移进项目"

☞A→α .Bβ (B∈VN) 称为"待约项目".

例:

文法 G(S')

S'→EE→aA|bBA→cA|d B→cB|d

该文法的项目有:

1.S'→·E2.S'→E·3.E→·aA4.E→a·A5.E→aA·

6.A→·cA7.A→c·A8.A→cA·9.A→·d10.A→d·

11.E→·bB12.E→b·B13.E→bB·  14.B→·cB15.B→c·B

16.B→cB·17.B→·d18.B→d·

◆ 构造识别文法所有活前缀的 NFA 方法

1. 若状态 i 为 X→X1 … Xi-1.Xi … Xn ,状态 j 为 X→X1 … Xi-1Xi .Xi+1 …

Xn ,则从状态 i 画一条标志为 Xi 的有向边到状态 j;

2. 若状态 i 为 X→α .Aβ ,A 为非终结符,则从状态 i 画一条ε边到所有状态

A→.γ。

◆ 把识别文法所有活前缀的 NFA 确定化。

◆ 构成识别一个文法活前缀的 DFA 的项目集(状态)的全体称为文法的 LR(0)项目集规

范族。

LR(0)分析表的构造

◆ 假若一个文法 G 的拓广文法 G'的活前缀识别自动机中的每个状态(项目集)不存在下

述情况:

1) 既含移进项目又含归约项目,

2) 含有多个归约项目

则称 G 是一个 LR(0)文法。

◆ 分析表的 ACTION 和 GOTO 子表构造方法:

1. 若项目 A→α·aβ属于 Ik 且 GO(Ik, a)=Ij,a 为终结符,则置 ACTION[k,a] 为

“sj”。

2. 若项目 A→α·属于 Ik,那么,对任何终结符 a(或结束符#),置 ACTION[k,a]为

“rj”(假定产生式 A→α是文法 G'的第 j 个产生式)。

3. 若项目 S'→S·属于 Ik,则置 ACTION[k,#]为 “acc”。

4. 若 GO(Ik,A)=Ij,A 为非终结符,则置 GOTO[k,A]=j。

5. 分析表中凡不能用规则 1 至 4 填入信息的空白格均置上“报错标志”。

 

◆ 按上述方法构造出的 ACTION 与 GOTO 表如果不含多重入口,则称该文法为 SLR

(1)

文法。

◆ 使用 SLR 表的分析器叫做一个 SLR 分析器。

◆ 每个 SLR

(1)文法都是无二义的。

但也存在许多无二义文法不是 SLR

(1)的.

I1、I2 和 I9 都含有“移进-归约”冲突。

FOLLOW(E)={#, ), +},

 

5.3.4  规范 LR 分析表的构造

◆ 我们需要重新定义项目,使得每个项目都附带有 k 个终结符。

每个项目的一般形式

是[A→α·β, a1a2…ak] ,这样的一个项目称为一个 LR(k)项目。

项目中的

a1a2…ak 称为它的向前搜索符串(或展望串)。

◆ 向前搜索符串仅对归约项目[A→α·,a1a2…ak]有意义。

对于任何移进或待约项目

[A→α·β, a1a2…ak], β≠ε,搜索符串 a1a2…ak 没有作用。

按上述算法构造的分析表,若不存在多重定义的入口(即,动作冲突)的情形,则称它

是文法 G 的一张规范的 LR

(1)分析表。

使用这种分析表的分析器叫做一个规范的 LR 分析器。

具有规范的 LR

(1)分析表的文法称为一个 LR

(1)文法。

LR

(1)状态比 SLR 多,LR(0)⊂SLR ⊂ LR

(1) ⊂无二义文法。

 

第六章 属性文法和语法制导翻译

 

6.1  属性文法

◆ 属性文法(也称属性翻译文法)

◆ 在上下文无关文法的基础上,为每个文法符号(终结符或非终结符)配备

若干相关的“值”(称为属性)。

◆ 属性代表与文法符

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 中国风

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1