《编译原理》复习要点Word文档下载推荐.docx

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

《编译原理》复习要点Word文档下载推荐.docx

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

《编译原理》复习要点Word文档下载推荐.docx

K;

END

目标代码产生

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

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

目标代码三种形式:

a)绝对指令代码:

可直接运行

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

需要连接装配

c)汇编指令代码:

需要进行汇编

三. 

编译程序结构

◆ 

编译程序总框 

(简答题 

分)

第二章 

高级语言及其语法描述

2.1.1 

语法

词法规则:

单词符号的形成规则。

a) 

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

一般包括:

常数、标识符、

基本字、算符、界符等。

b) 

正规式和有限自动机

语法规则:

语法单位的形成规则。

语法单位通常包括:

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

c) 

2.1.2 

语义

语义:

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

描述方法:

a)自然语言描述:

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

形式描述:

☞无二义性

☞ 

完整性

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

乘幂(**或↑)

一元负(-)

乘、除

加、减

关系符(<

=,>

<

=,>

=,<

>

非(¬

,not)

与(Λ,&

,and 

或(˅,|,or,)

不同的语言对算符优先级

的规定有差异,甚至差异

很大!

隐含(或 

imp)

等值(或 

epui,或~)

2.3 

程序语言的语法描述

几个概念:

a)考虑一个有穷 

字母表∑ 

字符集

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

c)∑上的字(也叫字符串) 

是指由∑中的字符所构成的一个有穷序列

d) 

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

e) 

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

例如:

设 

∑={a, 

b},则 

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

f)∑*的子集 

和 

的连接(积)定义为 

UV={ 

αb 

α∈U 

&

b∈V 

}

设:

U={ 

a, 

aa 

V= 

b, 

bb 

那么:

UV= 

ab, 

abb, 

aab,

aabb}

g)V 

自身的 

次积记为 

Vn=VV…V

h) 

规定 

V0={ε},令 

V*=V0∪V1∪V2∪V3∪… 

称 

V*是 

的闭包;

记 

V+=VV* 

,称 

V+是 

的正规闭包。

U* 

ε 

 

aa, 

aaa, 

aaaa, 

…}

U+ 

i)0 

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

产生式形如:

α 

→ 

β

其中:

α∈ 

(VT 

⋃ 

VN)*且至少含有一个非终结符;

β∈ 

VN)*

任何 

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

j)1 

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

|α| 

≤ 

|β|,仅 

S→ε 

例外。

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

空串ε 

k)2 

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

A∈ 

VN;

VN)*。

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

l)3 

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

αB 

或 

α

右线性文法

VT*;

A,B∈VN

Bα 

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

左线性文法

四种类型描述能力比较

m) 

上下文无关文法的定义:

一个上下文无关文法 

是一个四元式

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

VT:

终结符集合(非空)

VN:

非终结符集合(非空),且 

VT 

⋂ 

VN=∅

S:

文法的开始符号,S∈VN

P:

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

P→α, 

P∈VN, 

α 

∈ 

开始符 

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

文法 

G1(A):

c|Ab

G1(A)的语言?

解:

L(G1)={c,cb,cbb,⋯},以 

开头,后继若干个 

b

n)定义:

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

是二义的。

G(E):

i|E+E|E*E|(E) 

是二义文法。

o) 

语言的二义性:

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

可能存在 

G’,一个为二义的,一个为无二义的。

但 

L(G)=L(G’)

状态转换图

概念:

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

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

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

入字符或字符类。

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

正规运算符优先顺序

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

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

型文法-正规式

的任何产生式为 

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

3.3.2 

确定有限自动机(DFA)

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

自动机 

是一个五元式 

M=(S, 

∑, 

f, 

S0, 

F),其中:

S:

有穷状态集,

∑:

输入字母表(有穷),

f:

状态转换函数,为 

S⨯∑→S 

的单值部分映射,f(s,a)=s’表示:

当现行状态为 

s,输入字符为 

时,将状态转换到下一状态 

s’。

们把 

s’称为 

的一个后继状态。

S0∈S 

是唯一的一个初态;

F⊆S 

终态集(可空)。

例如:

DFA 

M=({0,1,2,3},{a,b},f,0,{3}), 

定义如下:

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) 

F),其中:

有穷状态集;

∑ 

输入字母表(有穷);

S⨯∑*→2S 

的部分映射(非单值);

S0⊆S 

是非空的初态集;

⊆S 

从状态图中看 

NFA 

的区别:

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

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

是 

的特例。

对于任何两个有限自动机 

M’,如果 

L(M)=L(M’),则称 

与 

M’等价。

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

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

对于每个 

存在一个 

M’,使得 

L(M)=L(M’)。

亦即 

描述能力

相同。

把上述 

确定化——采用子集法.

M’的状态集的一个子集,定义 

的ε-闭包ε-closure(I)为:

i) 

若 

s∈I,则 

s∈ε-closure(I);

ii) 

s∈I,则从 

出发经过任意条ε弧而能到达的任何状态 

s’都属于ε-

closure(I)

即 

ε-closure(I)=I⋃{s’|从某个 

s∈I 

出发经过任意条ε弧能到达 

s’}

是∑中的一个字符,定义 

Ia= 

ε-closure(J)

其中,J 

为 

中的某个状态出发经过一条 

弧而到达的状态集合。

3.3.4 

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

定理:

1.对每一个右线性正规文法 

或左线性正规文法 

G,都存在一个有限自动机(FA)

M,使得 

L(M)=L(G)。

2.对每一个 

FA 

M,都存在一个右线性正规文法 

GR 

和左线性正规文法 

GL,使得 

L(M)

=L(GR)=L(GL)。

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

对任何 

M,都存在一个正规式 

r,使得 

L(r)=L(M)。

对任何正规式 

r,都存在一个 

L(M)=L(r)。

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

(对一类输入符号)

3.3.6 

确定有限自动机的化简

对 

的化简:

寻找一个状态数比 

少的 

L(M)=L(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, 

2}

Ia(11) 

Ib(11) 

={2, 

5}

I(111) 

={0}I(112) 

={2} 

I(12) 

Ia

(2) 

={3, 

6}Ia

(2) 

={4, 

第四章 

语法分析——自上而下分析

语法分析的方法:

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

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

基本思想:

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

"

匹配"

的推导。

递归下降分析法:

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

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

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

预测分析程序

优点:

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

4.3 

LL

(1)分析法

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

要消除文法的左递归性

克服回溯

4.3.1 

左递归的消除

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

假定关于非终结符 

的规则为

P→Pα 

其中β不以 

开头。

我们可以把 

的规则等价地改写为如下的非直接左递归形式:

P→βP'

P'

→αP'

一般而言,假定 

关于的全部产生式是

左递归变右递归

P→Pα1 

Pα2 

… 

Pαm 

β1 

β2|…|βn

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

开头

那么,消除 

的直接左递归性就是把这些规则改写成:

P→β1P'

β2P'

βnP'

→α1P'

α2P'

|… 

αmP'

ε

提取公共左因子:

假定关于 

的规则是

A→δβ 

δβ 

…| 

γ 

γm(其中,每个γ 

不以δ开

头)

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

A→δA'

m

A'

→β 

β 

n

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

成为两两不相交。

4.3.3 

LL

(1)分析条件

假定 

是文法 

的开始符号,对于 

的任何非终结符 

A,我们定义

*

FOLLOW(A) 

{a 

⇒ 

...Aa...,a 

特别是,若 

⇒∙ 

∙ 

,则规定#∈FOLLOW(A)

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

文法不含左递归,

对于文法中每一个非终结符 

的各个产生式的候选首符集两两不相交。

即,若

A→α 

1|α 

2|…|α 

则 

FIRST(α 

i)∩FIRST(α 

j)=φ(i≠j)

i=1,2,...,n

对文法中的每个非终结符 

A,若它存在某个候选首符集包含ε,则

FIRST(A)∩FOLLOW(A)=φ

如果一个文法 

满足以上条件,则称该文法 

LL

(1)文法。

第五章 

语法分析——自下而上分析

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

号。

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

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

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

算符优先分析法:

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

适合分析表达式。

LR 

分析法:

规范归约

5.1.2规范归约

1.定义:

令 

是一个文法,S 

是文法的开始符号,假定αβδ是文法 

的一个句型,

如果有

*+

且 

αAδ 

, 

则称β是句型αβδ相对于非终结符 

的短语。

特别是,如果有 

A⇒β,则称β是句型αβδ相对于规则 

A→ 

β的直接短语。

一个句型的

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

2.归约

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

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

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

符号。

5.2 

算符优先分析

四则运算的优先规则:

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

考虑二义文法文法 

i| 

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

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

归约即计算表达式的值。

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

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

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

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

归约串”和进行归约。

5.2.1 

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

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

如下形式的产生式右部:

…QR…

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

约定:

a、b 

代表任意终结符;

P、Q、R 

代表任意非终结符;

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

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

对于任何一对终结符 

a、b,我们说:

a=b当且仅当文法 

中含有形如 

P→…ab…或 

P→…aQb…的产生式;

++

a<

b当且仅当 

P→…aR…的产生式, 

而 

b…或 

Qb…;

a>

P→…Rb…的产生式,而 

…a 

…aQ。

⏹如果一个算符文法 

中的任何终结符对(a,b)至多只满足下述三关系之一:

a=b,

b, 

b。

则称 

是一个算符优先文法。

从算符优先文法 

构造优先关系表的算法。

通过检查 

的每个产生式的每个候选式,可找出所有满足 

a=b 

的终结符对。

确定满足关系<

和>

的所有终结符对:

首先需要对 

的每个非终结符 

构造两个集合 

FIRSTVT(P)和 

LASTVT(P):

FIRSTVT 

(P) 

∙∙, 

Qa 

∈VT 

∈VN 

LASTVT(P 

) 

或P 

aQ 

而Q 

VN 

❑ 

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

的所

有终结符对。

Ø

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

那么,对任何 

b∈FIRSTVT(P),有 

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

a∈LASTVT(P),有 

按其定义,可用下面两条规则来构造集合 

FIRSTVT(P):

若有产生式 

P→a…或 

P→Qa…,则 

a∈FIRSTVT(P);

a∈FIRSTVT(Q),且有产生式 

P→Q…,则 

a∈FIRSTVT(P)。

练习:

P133-2

① 

计算它的 

LASTVT;

② 

计算 

的优先关系 

并确定 

是否是一个算符优先文法?

分析方法:

把"

历史"

及"

展望"

综合抽象成状态;

由栈顶的状态和现行的输入符

号唯一确定每一步工作

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

ACTION[s,a]:

当状态 

面临输入符号 

时,应采取什么动作.

GOTO[s,X]:

状态 

面对文法符号 

时,下一状态是什么

的每个产生式的右部添加一个圆点称为 

的 

LR(0)项目

如:

A→XYZ 

有四个项目:

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

称为"

归约项目"

归约项目 

S’→α 

接受项目"

.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·

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

方法

若状态 

X→X1 

Xi-1.Xi 

Xn 

,状态 

Xi-1Xi 

.Xi+1 

,则从状态 

画一条标志为 

Xi 

的有向边到状态 

j;

X→α 

.Aβ 

,A 

为非终结符,则从状态 

画一条ε边到所有状态

A→.γ。

把识别文法所有活前缀的 

确定化。

构成识别一个文法活前缀的 

的项目集(状态)的全体称为文法的 

LR(0)项目集规

范族。

LR(0)分析表的构造

假若一个文法 

的拓广文法 

G'

的活前缀识别自动机中的每个状态(项目集)不存在下

述情况:

1) 

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

2) 

含有多个归约项目

是一个 

LR(0)文法。

分析表的 

ACTION 

GOTO 

子表构造方法:

若项目 

A→α·

aβ属于 

Ik 

GO(Ik, 

a)=Ij,a 

为终结符,则置 

ACTION[k,a] 

“sj”。

属于 

Ik,那么,对任何终结符 

a(或结束符#),置 

ACTION[k,a]为

“rj”(假定产生式 

A→α是文法 

的第 

个产生式)。

→S·

Ik,则置 

ACTION[k,#]为 

“acc”。

GO(Ik,A)=Ij,A 

为非终结符,则置 

GOTO[k,A]=j。

5. 

分析表中凡不能用规则 

至 

填入信息的空白格均置上“报错标志”。

按上述方法构造出的 

表如果不含多重入口,则称该文法为 

SLR

(1)

文法。

使用 

SLR 

表的分析器叫做一个 

分析器。

每个 

SLR

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

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

SLR

(1)的.

I1、I2 

I9 

都含有“移进-归约”冲突。

FOLLOW(E)={#, 

), 

+},

5.3.4 

规范 

分析表的构造

我们需要重新定义项目,使得每个项目都附带有 

个终结符。

每个项目的一般形式

是[A→α·

β, 

a1a2…ak] 

,这样的一个项目称为一个 

LR(k)项目。

项目中的

a1a2…ak 

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

向前搜索符串仅对归约项目[A→α·

,a1a2…ak]有意义。

对于任何移进或待约项目

[A→α·

a1a2…ak], 

β≠ε,搜索符串 

没有作用。

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

的一张规范的 

LR

(1)分析表。

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

具有规范的 

LR

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

LR

(1)文法。

LR

(1)状态比 

多,LR(0)⊂SLR 

⊂ 

LR

(1) 

⊂无二义文法。

第六章 

属性文法和语法制导翻译

6.1 

属性文法

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

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

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

属性代表与文法符

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

当前位置:首页 > IT计算机 > 计算机软件及应用

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

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