编译原理 自上而下分析

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本章在编译程序中的地位

表词法分析器

语法分析器

源程序

单词符号

2

• 上下文无关文法的定义:

G G=(V T V N S P)

– V T ( )

– V N ( ) V T ∩ V N =∅ – S S ∈V N

– P ( )

P →α P ∈V N α ∈ (V T ∪ V N )*

– S

复习

• + *

G= {i + * ( )} {E} E P

P

E → i

E → E+E

E → E*E

E → (E)

(i+i)

E⇒(E)⇒(E+E)⇒(i+E)⇒(i+i)

3

4

}

,|{)(*T

V S G L ∈⇒=+

αααq 定义:假定G是一个文法,S 是它的开始符号。

如果S

α ,则α称是一个句型。仅含终结符号的句型是一个句子。文法G所产生的句子的全体是一个语言,将它记为 L(G)。

• α1 αn α1 αn

+ ⇒

α1 αn α1 0 αn

* ⇒ 所以 : α1 αn 即 α1=αn , α1 αn

* ⇒ + ⇒ * ⇒

第4章 自上而下语法分析

• 

消除文法左递归,消除回溯,计算FIRST集、FOLLOW集,LL(1)分析条件, LL(1)文法的概念,预测分析表的构造。• :

自上而下分析方法的基本思想, 自上而下分析的过程。• 

4.1

4.2

4.3 LL(1)

4.4

重点难点

4.5

*4.6 LL(1)

5

6

4.1 语法分析器的功能

• 

是在词法分析识别出单词符号串的基础上,分析判断程序的 是否符合语法规则。

• 

是编译过程的核心部分。

• 

有自上而下和自下而上两类。 两种方法反映了两种语法树的构造过程。

7

4.1 语法分析器的功能

• 

" " 推导。

也就是从文法的开始符号开始,将它做为语法树的根,向下逐步建立语法树,使语法树的结果正好是输入符号串.

• 

“归约”

也就是从输入符号串开始,以它做为语法树的结果,自底向上地构造语法树.

注:这里所说的输入符号串指词法分析所识别的单词。

8

4.2 自上而下分析面临的问题

• 

– . – .

• 例4.1文法:⑴ S→xAy

⑵ A→** ⑶ A→*

输入串 α=x*y,分析α是否该文法的句子?

指示器IP指向 语法树 最左推导 说明

x*y S S, x

序号 ip 指向 语法树 最左推导 说明

S x*y

x A y A →** A

S ⇒xAy ⇒x**y

* *

x*y

* , ip S

序号 ip 指向 语法树 最左推导 说明

x*y S

x A y

A →* A

S ⇒xAy ⇒x*y * x*y * , ip S

x A y

12

自上而下分析

• 

从文法的开始符号出发,向下推导,试图推出句子,匹配输入符号串,寻找输入串的最左推导,并按与最左推导相对应的顺序,自上而下从左到右地建立输入串的语法分析树。 • – , , , ,

– ip

• 

13

自上而下分析

※ “ ”

• – 

14

候选式的确定与回溯问题 • 自上而下分析是一种反复用可能的候选式去进行试探的过程,不能预

知本次试探是否会成功,若不成功

则需要回溯。

• S →xAy A →**|*

x*y

• S x A y * * 不成功,回溯 S x A y

* 成功

x*y 是句子

左递归

• 

P +Pα

– 直接左递归:P → Pα

– 间接左递归:存在推导P → Aα, A + Pβ • 文法具有左递归性,采用自上而下方法分析,可能

16

4.2 自上而下分析面临的问题

• :

– ,

– , • 

17

4.2 自上而下分析面临的问题

1. 如果文法存在左递归,自上而下语法分析会无限循环下去;

※ 一个文法含有左递归,如存在非终结符P: P → P α ※ 会使分析陷入无限循环:即当使用P去匹配新的串时,在没识别任何输入符号,却要从新使用P去匹配

2. 产生式存在多个候选式,选择哪个推导完全是盲目的;

3. 回溯会引起时间和空间的大量消耗;

4. 如果被识别语句是错的,算法无法指出错误的确切位置;

4.3 不带回溯的自上而下分析法 • 文法不含左递归

左递归的存在可能使自上而下分析过程陷入

无限循环, 故使用自上而下分析法必须消除文

法的左递归 。

• 分析过程无回溯

回溯的存在可能使已做的大量语法和语义分析推倒重来, 这会严重影响效率, 故使用自上

而下分析法必须消除回溯。

18

相关文档
最新文档