自顶向下语法分析方法精品PPT课件
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章 自顶向下语法分析方法
学习目标: ➢掌握:LL(1)文法的判别,预测分析 法,递归子程序的构造方法 ➢理解:LL(1) ➢了解:不确定的自顶向下分析
语法分析的作用是识别由词法分析给出的单词序 列是否是给定文法的正确句子
分类:
语法分析
自顶向下分析
自底向上分析
确定的
不确定的 算法优先分析(第六章)
εd S =>aA=>abAS =>abS =>abd
要进行确定的自顶向下的分析,文法要满足一 定的限制——即文法是LL(1)文法。
先研究三个定义 开始符号集FIRST 后跟符号集FOLLOW 选择集合SELECT
2 开始符号集FIRST(α)的定义
定义:设G=(VN, VT, P, S)是上下文无关文法, (VNVT)* FIRST() = { a VT | * a......} 若* ε 则规定ε ∈FIRST()
同一非终结符的不同产生式A→α与A→β,若 SELECT(A→α)∩SELECT(A→β)=Φ,则一定可以 进行确定的自顶向下分析
LR分析(第七章)
自顶向下的基本思想: 从文法的开始符出发企图推导出与输入的单词串 完全相匹配的句子.
5.1 确定的自顶向下分析思想 5.2 LL(1)文法的判别 5.3 某些非LL(1)文法到LL(1)文法的等价变换 5.4 不确定的自顶向下分析思想 5.5 确定的自顶向下分析方法
5.1 确定的自顶向下分析思想
4 选择集合SELECT(A→α)的定义
定义 对给定的上下文无关文法的产生式A→α, A∈VN,α∈V*, ➢若α≠>*ε,则SELECT(A→α)=FIRST(α) ➢若α=>*ε, 则SELECT(A→α)
=(FIRST(α)-{ε})∪FOLLOW(A)
解释
当A面对应输入符a,在自顶向下的分析中应选择这 样的产生式A→进行推导:First()中包含a;
S→d
=(FIRST(α)-{ε})∪FOLLOW(A)
A→bAS
A→ε
SELECT(S→aA)=FIRST(aA)={a} SELECT(S→d)=FIRST(d)={d} SELECT(A→bAS)=FIRST(bAS)={b} SELECT(A→ε)=FOLLOW(A)={#,a,d}
பைடு நூலகம்
说明:
c Ad
a S =>pA =>pcAd =>pccAdd =>pccadd
例2:设有文法G2[S]为: S→Ap|Bq 若输入串W=ccap,自顶向下的推导过程为:
A→a|cA B→b|dB
S
该例说明,当 (1) 产生式右部以终结符或非终结符开头(无空产生式); (2) 同一非终结符的不同产生式的右部由不同的符号开头。 对于这种文法,在推导过程选用哪个产生式不直观,关键是判断 产生式右部推出的开始符号(集),分析过程可能是确定
1 确定分析的条件 2 开始符号集FIRST(α)的定义 3 后跟符号集FOLLOW(A)的定义 4 选择集合SELECT(A→α)的定义 5 LL(1)文法的定义
1 确定分析的条件
从文法的开始符出发,如能根据当前的输入符号(单词符号) 唯一地确定选用哪个产生式进行推导,则分析是确定的。
例1 设有文法G1[S]: S→pA|qB
直观上说文法符号串 的开始符号集是由推导出的开头的终结符 (包括ε)组成。
例文法G2[S]:
S→Ap FIRST(Ap)={a,c}
S→Bq
FIRST(Bq)={b,d}
A→a
FIRST(a)={a }
A→cA FIRST(cA)={c}
B→b
FIRST(b)={b}
B→dB FIRST(dB)={d}
由于同一非终结符的两个产生式的右部推导出来的 开始符号集不相交,因此可根据当前输入符属于哪 个产生式右部的开始符号集而决定选哪个产生式进 行推导,可以进行确定的自顶向下分析
3 后跟符号集FOLLOW(A)的定义
定义 设G=(VT, VN, P, S)是上下文无关文法,A∈VN , FOLLOW(A)={a|S=>*…Aa…,a ∈VT}, 若有S=>* …A,则规定 # ∈FOLLOW(A) (注: # 输入串#,‘#’做为输入串的结束符)
FOLLOW(A)={#,a,d} ➢由 S=>* S 得 # ∈FOLLOW(S)
由S=>aA=>abAS=>abbASS=>abbASaA …=>abbASd
FOLLOW(S)={#,a,d}
说明: 对于非终结符A的两个产生式 A→bAS 和 A→ε, 当输入符号∈FIRST(bAS)={b}时,选A→bAS推导, 当输入符号∈FOLLOW(A)={#,a,d }时,选A→ε推导。 由于FIRST(bAS)∩FOLLOW(A)=ф,所以可进行确定的 自顶向下分析。
直观上说,非终结符A的后跟符号集是由句型中紧跟A后 的那些终结符(包括#)组成。
例 文法G3[S]: S→aA|d A→bAS|ε ➢由S=>* aA 得 # ∈FOLLOW(A)
由S=>* abAS=>* abAaA 得 a ∈FOLLOW(A) … =>* abAd 得 d ∈FOLLOW(A)
Ap
cA
cA a
S =>Ap =>cAp =>ccAp =>ccap
例3:设有文法G3[S] S→aA|d A→bAS| ε 若输入串W=abd,自顶向下的推导过程为:
S aA
文法的特点是:包含空产生式
对于空产生式左部的非终结符,关键是判断该非终结符的 后跟符号(集),分析过程可能是确定的。
bAS
此外若可能导出空串,A自动获得匹配,输入符a有 可能与A后的一个符号匹配,所以当a应属于 Follow(A)时,选择产生式A→也是可以的。
直观上说某产生式A→α的选择集合是指遇到哪些输 入符号(包括#)时选用该产生式向下推导。
例 G3[S]: 若α≠>*ε,则SELECT(A→α)=FIRST(α) S→aA 若α=>*ε, 则SELECT(A→α)
A→cAd|a
B→dB|b
若输入串W=pccadd。自顶向下的推导过程为:
G1[S]有如下特点:
S
(1) 每个产生式的右部由终结符开头;
(2) 同一非终结符的不同产生式的右部由不同的终结符开
p
A
头。 对于这种文法,在推导过程可以根据当前的输入符号唯一
确定选哪个产生式往下推导,即分析过程是确定的。
c Ad
学习目标: ➢掌握:LL(1)文法的判别,预测分析 法,递归子程序的构造方法 ➢理解:LL(1) ➢了解:不确定的自顶向下分析
语法分析的作用是识别由词法分析给出的单词序 列是否是给定文法的正确句子
分类:
语法分析
自顶向下分析
自底向上分析
确定的
不确定的 算法优先分析(第六章)
εd S =>aA=>abAS =>abS =>abd
要进行确定的自顶向下的分析,文法要满足一 定的限制——即文法是LL(1)文法。
先研究三个定义 开始符号集FIRST 后跟符号集FOLLOW 选择集合SELECT
2 开始符号集FIRST(α)的定义
定义:设G=(VN, VT, P, S)是上下文无关文法, (VNVT)* FIRST() = { a VT | * a......} 若* ε 则规定ε ∈FIRST()
同一非终结符的不同产生式A→α与A→β,若 SELECT(A→α)∩SELECT(A→β)=Φ,则一定可以 进行确定的自顶向下分析
LR分析(第七章)
自顶向下的基本思想: 从文法的开始符出发企图推导出与输入的单词串 完全相匹配的句子.
5.1 确定的自顶向下分析思想 5.2 LL(1)文法的判别 5.3 某些非LL(1)文法到LL(1)文法的等价变换 5.4 不确定的自顶向下分析思想 5.5 确定的自顶向下分析方法
5.1 确定的自顶向下分析思想
4 选择集合SELECT(A→α)的定义
定义 对给定的上下文无关文法的产生式A→α, A∈VN,α∈V*, ➢若α≠>*ε,则SELECT(A→α)=FIRST(α) ➢若α=>*ε, 则SELECT(A→α)
=(FIRST(α)-{ε})∪FOLLOW(A)
解释
当A面对应输入符a,在自顶向下的分析中应选择这 样的产生式A→进行推导:First()中包含a;
S→d
=(FIRST(α)-{ε})∪FOLLOW(A)
A→bAS
A→ε
SELECT(S→aA)=FIRST(aA)={a} SELECT(S→d)=FIRST(d)={d} SELECT(A→bAS)=FIRST(bAS)={b} SELECT(A→ε)=FOLLOW(A)={#,a,d}
பைடு நூலகம்
说明:
c Ad
a S =>pA =>pcAd =>pccAdd =>pccadd
例2:设有文法G2[S]为: S→Ap|Bq 若输入串W=ccap,自顶向下的推导过程为:
A→a|cA B→b|dB
S
该例说明,当 (1) 产生式右部以终结符或非终结符开头(无空产生式); (2) 同一非终结符的不同产生式的右部由不同的符号开头。 对于这种文法,在推导过程选用哪个产生式不直观,关键是判断 产生式右部推出的开始符号(集),分析过程可能是确定
1 确定分析的条件 2 开始符号集FIRST(α)的定义 3 后跟符号集FOLLOW(A)的定义 4 选择集合SELECT(A→α)的定义 5 LL(1)文法的定义
1 确定分析的条件
从文法的开始符出发,如能根据当前的输入符号(单词符号) 唯一地确定选用哪个产生式进行推导,则分析是确定的。
例1 设有文法G1[S]: S→pA|qB
直观上说文法符号串 的开始符号集是由推导出的开头的终结符 (包括ε)组成。
例文法G2[S]:
S→Ap FIRST(Ap)={a,c}
S→Bq
FIRST(Bq)={b,d}
A→a
FIRST(a)={a }
A→cA FIRST(cA)={c}
B→b
FIRST(b)={b}
B→dB FIRST(dB)={d}
由于同一非终结符的两个产生式的右部推导出来的 开始符号集不相交,因此可根据当前输入符属于哪 个产生式右部的开始符号集而决定选哪个产生式进 行推导,可以进行确定的自顶向下分析
3 后跟符号集FOLLOW(A)的定义
定义 设G=(VT, VN, P, S)是上下文无关文法,A∈VN , FOLLOW(A)={a|S=>*…Aa…,a ∈VT}, 若有S=>* …A,则规定 # ∈FOLLOW(A) (注: # 输入串#,‘#’做为输入串的结束符)
FOLLOW(A)={#,a,d} ➢由 S=>* S 得 # ∈FOLLOW(S)
由S=>aA=>abAS=>abbASS=>abbASaA …=>abbASd
FOLLOW(S)={#,a,d}
说明: 对于非终结符A的两个产生式 A→bAS 和 A→ε, 当输入符号∈FIRST(bAS)={b}时,选A→bAS推导, 当输入符号∈FOLLOW(A)={#,a,d }时,选A→ε推导。 由于FIRST(bAS)∩FOLLOW(A)=ф,所以可进行确定的 自顶向下分析。
直观上说,非终结符A的后跟符号集是由句型中紧跟A后 的那些终结符(包括#)组成。
例 文法G3[S]: S→aA|d A→bAS|ε ➢由S=>* aA 得 # ∈FOLLOW(A)
由S=>* abAS=>* abAaA 得 a ∈FOLLOW(A) … =>* abAd 得 d ∈FOLLOW(A)
Ap
cA
cA a
S =>Ap =>cAp =>ccAp =>ccap
例3:设有文法G3[S] S→aA|d A→bAS| ε 若输入串W=abd,自顶向下的推导过程为:
S aA
文法的特点是:包含空产生式
对于空产生式左部的非终结符,关键是判断该非终结符的 后跟符号(集),分析过程可能是确定的。
bAS
此外若可能导出空串,A自动获得匹配,输入符a有 可能与A后的一个符号匹配,所以当a应属于 Follow(A)时,选择产生式A→也是可以的。
直观上说某产生式A→α的选择集合是指遇到哪些输 入符号(包括#)时选用该产生式向下推导。
例 G3[S]: 若α≠>*ε,则SELECT(A→α)=FIRST(α) S→aA 若α=>*ε, 则SELECT(A→α)
A→cAd|a
B→dB|b
若输入串W=pccadd。自顶向下的推导过程为:
G1[S]有如下特点:
S
(1) 每个产生式的右部由终结符开头;
(2) 同一非终结符的不同产生式的右部由不同的终结符开
p
A
头。 对于这种文法,在推导过程可以根据当前的输入符号唯一
确定选哪个产生式往下推导,即分析过程是确定的。
c Ad