自顶向下语法分析方法

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

教学重点:
1.LL(1)文法的定义; 2.求first集合、follow集合与select集合
教学难点 :
求first集合、follow集合与select集合
教学课时:2 教学方法:多媒体教学 教学内容和步骤 :(如下) 3
第4章我们学习词法分析,介绍词法分析 的工具(主要讲正规文法)和方法(DFA和 NFA)。 本章介绍语法分析:在词法分析的基础上, 分析句子是否正确。
因此,该文法不是LL(1)文法,因而也就不 可以采用确定的自顶向下分析方法。
(First()-{ε})∪Follow(A)
16
5. LL(1)文法的定义: 一个上下文无关文法是LL(1)文法的充分必要 条件是对每个非终结符A的两个不同产生式:
A,Aβ满足Select(A)∩Select(Aβ)=, 其中、β不同时 。 对于LL(1)文法,我们可以采用确定的自 顶向下分析方法进行分析。
第5章 自顶向下语法分析方法
1
主要内容
5.1 确定的自顶向下分析思想 5.2 LL(1)文法的判别 5.3 非LL(1)文法到LL(1)文法等 价变换 5.4 不确定的自顶向下分析思想 5.5 确定的自顶向下分析方法
2
第 八 讲
课题:自顶向下语法分析的基本思想与LL(1)文法 目的要求:
1.理解并掌握LL(1)文法的定义; 2.掌握first集合、follow集合与select集合的求解方法;
8
语法树为:
S S A p

c
A
A
p
S
S
A c c
9
A
p
p
A


c c
A A
A
a
在上述2个例子推导过程中,如何根据输 入串的第1个符号来确定产生式呢?
2. 开始符号集合的定义 设G=(VT,VN, P ,S )是上下文无关文 * aβ, 法,开始符号集合为First()={ a | a∈VT, 、β∈V*}
S a A
a
A b A S a
S
A bA S ε
12
S
a A bA S ε d


从上例可以看出:第二步推导的产生式该如 何确定呢?为此引入后跟符号的集合定义:
3. 后跟符号集合的定义:
设G=(VT,VN,P,S)是上下文无关文法, A∈VN,S是开始符号,
* uAβ且a∈V ,a ∈First(β), Follow(A)={a | S T u∈VT*,β∈V+}。 * uAβ,且β * 若S ε,则#∈Follow(A)
Select(AbAS) ∩Select(Aε) ={b}∩{a,d,#}=
所以,上述文法是LL(1)文法。
20
例6:设文法G[S]为: S aAS | b A bA |ε 判别是否是LL(1)文法。
21
解: Select(S aAS)=first(aAS)={a} S aAS aAb S aAS Select ( S b ) ={b} aAaAS Select ( A bA ) ={b} Select ( A ε) =(first(ε)-{ε})∪follow(A)={a,b} Select( SaAS ) ∩Select(Sb ) ={a}∩{ b }= Select(A bA) ∩Select(A ε)={b}∩{a,b}
(#表示输入串的结束符,或句子括号)
13
也可以定义为:
* …Aa…, a∈V } Follow(A)={a|S T * …A,则#∈Follow(A)。 若S
换句话说: Follow(A)是所有句型中出现在紧接A之后 的终结符或“#”。
14
例4:在例2中文法G[S]为:S Ap | Bq
SpA pcAd 源自文库 pccAdd pccadd
相应的语法树: S
p A
S

p
A c Ad
6

S
S A

p

p
A
c Ad
c Ad c Ad
a
7
c Ad
例2:文法G(S)为: S →Ap
S → Bq A →a∣cA B→b∣dB
当输入W=ccap推导:
自顶向下的推导过程为:
S Ap cAp ccAp ccap
自顶向下分析 确定 不确定 算符优先分析 自底向上分析
4
常用方法
LR分析(第7章)
5.1 确定的自顶向下分析思想
1.方法:从开始符号出发,根据当前的单词 符号选定产生式替换非终结符往下推导,或 者构造一棵语法树。
例1:文法G(S):
S→pA S→qB A→cAd A→a
输入串 W=pccadd
5
自顶向下的推导过程为:
A a | cA
B b | dB
求Follow集。 解:Follow(S)={#} Follow(A)={p}
Follow(B)={q}
15
4. 选择集合的定义
给定上下文无关文法的产生式A, AVN,V*,
* ε,则Select(A)=First(); 若
* 若ε,则Select(A)=
* ε,则规定∈First() 。 若
所以对于例2中文法G(S)有: FIRST(Ap)={a,c}; FIRST(Bq)={b,d}
10
例3:文法G[S] :
S aA | d
A bAS|ε
若输入W=abd,则推导过程为: S aA abAS abS abd
11
语法树为: S
SaA abAS abAd S aA abAS abAaA 所以Follow(A)={a,d,#} SAa * ε aA
Select (Aε) = (first(ε)-{ε})∪follow(A)={a,d,#}
19
不难看出,其中 Select (SaA) ∩Select(Sd) {a}∩{d}= =
*
17
6. LL(1)文法的含义 •第一个L表示:自顶向下分析是从左向右扫 描输入串。 •第二个L表示:分析过程中将用最左推导。 • 1表示:只需向右看一个符号便可决定如何 推导(即选择哪个产生式进行推导)。 •类似也可以有LL(K)文法:需向前查看K个 符号才可确定选用哪个产生式。
18
例5:上例3文法: SaA|d AbAS|ε 不难看出: Select(Sa A)=First(aA)={a} Select (Sd)= First(d)={d} Select (AbAS)={b}
相关文档
最新文档