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

27
第第第 第第第第—第第第第第第

Upload: easter

Post on 16-Jan-2016

158 views

Category:

Documents


0 download

DESCRIPTION

第五章 语法分析 — 自下而上分析. 主 要 内 容. 本章学习自下而上的分析技术,就是从输入串开始,逐步进行 “ 归约 ” ,直到规约到文法的开始符号,或者说,从语法树的末端开始,逐步向上归约,直到根结。 基本概念 算符优先分析法 LR 分析法. 5.1 自下而上分析的基本问题. 归约 规范归约 分析栈的使用与语法树的表示. 归约. 自下而上的分析比自顶向下方法强大,但构造分析算法不易手工完成。 自下而上分析使用显式符号栈完成分析。 分析栈可存放终结符,非终结符。 分析开始栈为空,分析成功栈中只剩开始符号。. 移进、归约. - PowerPoint PPT Presentation

TRANSCRIPT

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

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

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

主 要 内 容 本章学习自下而上的分析技术,就是从输入串开始,逐步进行“归约”,直到规约到文法的开始符号,或者说,从语法树的末端开始,逐步向上归约,直到根结。

基本概念 算符优先分析法 LR分析法

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

5.1 自下而上分析的基本问题 归约 规范归约 分析栈的使用与语法树的表示

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

归约 自下而上的分析比自顶向下方法强大,但构造分析算法不易手工完成。

自下而上分析使用显式符号栈完成分析。 分析栈可存放终结符,非终结符。 分析开始栈为空,分析成功栈中只剩开始符号。

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

移进、归约 自底向上的分析程序有两种可能的动作:

1 )移进:将终结符从输入串的开头移进到栈的顶部。 2 )归约:假设文法有产生式 A-> ,将栈顶部的串归约为非终结符 A 。

自底向上分析程序由此也称作移进—归约分析程序。

移进 - 归约分析程序将终结符从输入移进到栈直到栈顶能执行一个归约。

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

例子: P83文法 G 为 : (1) S →aAcBe (2) A →b (3) A →Ab (4) B →d

1 2 3 4 5 6 7 8 9 10进 进 归 进 归 进 进 归 进 归a b (2) b (3) c d (4) e (1)

e

d B B

b c c c c

b A A A A A A A

a a a a a a a a a S

步骤:

动作:

操作 :把栈顶的一串符号用某个产生式的左部符号来代替。

要识别的输入串:abbcde

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

可规约串的定义不同产生了不同的自下而上的语法分析方法:

可归约串

可规约串算符优先分析 最左素短语

规范规约分析 句柄

各种不同的自下而上的分析的共同点:

边输入单词符号,边规约

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

自上而下的语法树在第 3步中,把栈顶 b规约为 A

b

A

A

b d

B

在第 8步中,把栈顶 d规约为 B

a

S

c e

在第 5步中,把栈顶 Ab规约为 A

在第 10步中,把栈顶 aAcBe规约为 S

这样判断栈顶的符号串这样判断栈顶的符号串的可规约性,如何规约?的可规约性,如何规约?

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

几个概念: P85 短语、直接短语和句柄

规范规约: P86 规范规约的实质:在移进过程中,当发现栈顶呈现句柄时就用相应的产生式的左部符号进行替换。

规范句型: P86

规范规约

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

句柄 非形式地说,一个串的“句柄”是和一

个产生式右部匹配的子串。 把句柄归约成该产生式左部的非终结符

代表了最右推导逆过程的一步。 在很多情况下,匹配某产生式 A→β 右部

的最左子串 β 不是句柄。这个产生式归约产生的串不能归约成开始符号。

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

短语、直接短语和句柄的求法 短语:子树的末端结点构成的符号串

直接短语:简单子树(只有父子两代)的末端结点构成的符号串

句柄:最左简单子树的末端结点构成的符号串

b

A

A

b d

Ba

S

c e

(1) S →aAcBe (2) A →b(3) A →Ab (4) B →d

现在该明白了为什么在第 5步中,把栈顶 Ab规约为 A,而不是把栈顶 b规约为 A(因为这时 Ab是句柄,而 b不是句柄)

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

求短语、直接短语和句柄文法 5.2 的句型 E+T*F+i

E

T

i

F

+E

T+E

F*T

句型 E+T*F+i的短语有:T*F、 E+T*F、 i 、 E+T*F+i

直接短语有: T*F、 i

句柄是: T*F练习:求文法 5.2 的句子i1*i2+i3 的短语、直接短语和句柄

文法 5.2 : E →T|E+T

T →F|T*F

F →i|(E)

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

求短语、直接短语和句柄已知文法 G: S →AB , A →Aa |bB , B →a|Sb

求该文法的句型 baSb 的句柄

S

B

b

A

Bb

a

S

ba 、 a 和 Sb 是短语; a和 Sb 是直接短语, a 是句柄

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

对于文法 G :

E → E+T | E-T | T

T → T*F | T/F | F

F → i | (E)

( 1 )证明 E +T/F *( i+i) 是 G 的一个规范句型;

( 2 )指出该句型所有的短语、直接短语、句柄。

课后练习:

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

文法: E → E+T | E-T | T T → T*F | T/F | F

F → i | (E) 的句型 : E+T/F * ( i +i )

E+T/F * ( i +i )的最右推导过程:

E → E+T → E+T *F → E+T * ( E → ) E+T * ( E+T → )E+T * ( E+F → ) E+T * ( E+i → ) E+T * ( T+i → )E+T * ( F+i → ) E+T * ( i+i )→ E+T/F * ( i +i )

能由最右推导得出就证明该句型是个规范句型。 i2

E

T+E

T

F/T

F*T

)E(

T+E

i1

F

F短语: T/F, i1 , i2 , i1+ i2 ,(i1+ i2 ) , T/F*(i1+ i2 ), E+T/F*(i1+ i2 ) 直接短语 : T/F , i1 , i2 句柄 : T/F

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

符号栈的使用与语法树的表示 栈是语法分析的一种基本数据结构。

步骤 符号栈 输入串 动作0 # i1 * i2 +i3# 预备1 # i1 * i2 +i3# 移进2 #F * i2 +i3# 用 F-> i 归约3 #T * i2 +i3# 用 T -> F 归约4 #T* i2 +i3# 移进5 #T* i2 +i3# 移进6 #T *F +i3# 用 F-> i 归约7 #T +i3# 用 T-> T*F 归约… … … …

E

T

i3

F

+E

T

F*T

i1

i2F

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

符号栈的四类操作 移进:把输入串的一个符号移进栈。 规约:发现栈顶呈现可规约串,并用适当的符号替换该符号串。

接受:宣布最终分析成功。 出错:发现栈顶的内容与输入串相悖,分析工作无法正常进行。

移进 - 归约分析程序描绘出输入串的最右推导的逆序。 为了判断要完成的动作,自底向上的分析程序需要

在栈内看得更深,不仅仅在顶部。且需和输入中的记号一起考虑。

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

移进归约分析程序 :1 )将终结符从输入移进到栈 ;2 )在分析栈顶形成一个能执行归约的产生式的右边。3 )位于栈顶部的符号串匹配归约,用该产生式的左部符号代替这个子串。4 )每步选则恰当的子串,产生最右推导的逆过程。

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

算符优先分析 三种优先关系 P89a<b a=b a>b注意: a<b 不等同于 b > a 算符文法定义:一个文法的任一产生式的右部都不含两个相继的非

终结符,即不存在… QR…例子:文法 G1 : E →EAE| ( E ) |-E| i A →+|-|*|/ (不

是) 文法 G2 : E →T|E+T T →F|T*F F →i|(E) (是)

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

算符优先文法 P90 注意:是文法中的任何终结符对( a , b )至多满足三个关系之一。(优先表)例子:文法 G1 : E →E+E| E*E | ( E ) | i 不是算符优先

文法,因为 +<* 而 + > *E

E+E

E*E

E

E*E

E+E

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

算符优先分析中的可归约串 可归约串——最左素短语

1 )素短语:至少含一个终结符,并且初自身外不再含任何更小的素短语的短语 ;2 )最左素短语:位于句型最左边的那个素短语。

求法:类似与句柄的求法例子:文法 5.2 的句子 i 1* i 2+i3

E

T

i3

F

+E

T

F*T

i1

i2F

素短语: i 1 , i 2 , i3

最左素短语: i 1

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

算符优先分析 P93( 1 )将输入串 R1R2…RK 依次逐个进符号栈,直到符号栈顶元

素 Sj 与下一个待输入的符号 RK 的优先关系满足 Sj>RK 为止;( 2 )最左素短语的尾部 Sj 出现在符号栈顶,由此向前在栈中

找到最左素短语的头部 Si (就是找到第一个 Si<=Q 为止)( 3 )将得到的最左素短语逐个出栈;( 4 )重复执行上述 3 个步骤,直到栈顶呈现 # N # 为止;

注意:对于非终结符,都一律视为 N ,而不作具体的研究

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

例子:请用算符优先分析方法判断符号串 i * ( i + i )是否为文法 G : E →T|E+T T →F|T*F F →i|(E) 的句子

符号栈 关系 输入串 最左素短语

# < i1 * ( i2 +i3 ) #

# i1 > * ( i2 +i3 )#

i1

#V < * ( i2 +i3 )#

# V * < ( i2 +i3 ) ## V * ( < i2 +i3 ) ## V * ( i2 > +i3 ) # i2

# V * ( V < +i3 ) ## V * ( V+ < i3 ) ## V * ( V + i3

> ) # i3

# V * ( V +V

> ) # V +V

# V * ( V = ) ## V * ( V ) > # ( V )

# V * V > # V *V

# V = #

优先表参见教材P90表 5.1

i3

T

F*T

)E(

T+E

i2

F

F

F

i1

T

E

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

算符优先表的构造 P91

FIRSTVT ( P ) ={a| P a… 或 P Qa… , aVT }+ +

LASTVT ( P ) ={a| P … a 或 P … aQ , aVT }+ +

构造优先表的过程就是寻找文法中的终结符号对之间满足 3 种优先关系的哪一种。•对于后选式… ab…或… aQb… ,则 a=b

•对于后选式… aP… ,任何 b FIRSTVT ( P ),则a<b

•对于后选式… Pb… ,任何 a LASTVT ( P ),则a>b

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

构造算符优先表的例子 构造文法

G ( E ):

E →T|E+T T →P|T*P P →i的优先表

( 1 ) FIRSTVT 的构造 P → a… 或 P → Q a … ,则 a FIRSTVT ( P );

文法中 E → E+… ,得FIRSTVT ( E ) ={+} ;

T → T*… ,得 FIRSTVT ( T ) ={*} ;

P →i ,得 FIRSTVT ( P ) ={i} ;( 2 )若 aFIRSTVT ( Q )且 P→Q… 则 a FIRSTVT ( P ) 文法中 T →P ,得 FIRSTVT ( P )

FIRSTVT ( T ) ={* , i} ;E →T ,得 FIRSTVT ( T ) FIRSTVT ( E ) ={* , i , +} ;最终结果 FIRSTVT ( T ) ={* , i} ;

FIRSTVT ( E ) ={* , i , +} ;

FIRSTVT ( P ) ={i}

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

构造算符优先表的例子 构造文法

G ( E ):

E →T|E+T T →P|T*P P →i的优先表

( 1 ) LASTVT 的构造 P → … a 或 P → … aQ ,

则 a LASTVT ( P );文法中 E → … +T ,得LASTVT ( E ) ={+} ;

T → … *P ,得 LASTVT ( T ) ={*} ;

P →i ,得 LASTVT ( P ) ={i} ;( 2 )若 aLASTVT ( Q )且 P→… Q则 a LASTVT ( P ) 文法中 T →P ,得 LASTVT ( P )

LASTVT ( T ) ={* , i} ;E →T ,得 LASTVT ( T ) LASTVT ( E ) ={* , i ,+} ;最终结果: LASTVT ( T ) ={* , i} ; LASTVT ( E ) ={* , i

, +} ;

LASTVT ( P ) ={i}

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

构造文法 G ( E ):

E →T|E+T T →P|T*P P →i 的优先表( 1 )对 P →…ab… 或 P →…aQb… ,有 a=b ( 2 )对于后选式 P → … aP… ,任何 b FIRSTVT ( P ),则a<b

( 3 )对于后选式 P → … Pb… ,任何 a LASTVT ( P ),则a>b

1 )本例中没有满足条件( 1 )的终结符号对

2 ) E→ … +T ,得 + < FIRSTVT ( T ) ={* , i} ;有 + < * , + < i

T → … *P ,得 * < FIRSTVT ( P ) ={i} ;有 * < i

3 ) E → E+… ,得 LASTVT ( E ) >+ ;有 + > +, *> + ,i > +

T → T*… ,得 LASTVT ( T ) > * ;有 *> *, i > *+ * i

+ > < <* > > <i > >