编译原理语法分析_自上而下__LL(1)文法__确定的自上而下分析思想

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

小结
- 文法中有空产生式 不确定分析
确定分析
G6: S→ aA | d A→bAS |ε FIRST(A) ∩
FOLLOW(A) =Ø
G7: S→aAS | b A→bAS|ε FIRST(A) ∩
FOLLOW(A) = {b} ≠ Ø
FTRST(αi) ∩ FIRST(αj) = Ø FTRST(A) ∩ FOLLOW(A) = Ø
练习: 求 FOLLOW 集, 对 #ab# 进行句型分析
G7: S→aAS | b A→bAS|ε 不确定 !
Follow(A) = { a, b }
Follow(S) = { #, a, b } FIRST(A) = {b, ε} FOLLOW(A) = {a,b} FIRST(A) ∩ FOLLOW(A) = {b} ≠ Ø
(1)
确定的(不带回溯)自上而下语法分析 的文法条件 LL(1)文法 A→α1 |α2 |…|αn FIRST(αi) ∩ FIRST(αj) = Ø (i≠j)
ε∈First(A)ห้องสมุดไป่ตู้FIRST(A) ∩ FOLLOW(A) = Ø
(2)
• 文法不含左递归、不含左公因子
LL(1)文法 的确定的自上而下分析过程
其中α, β不同时能
* ε
例: 判断文法是否为LL(1)文法
G: S→aA S→d A→bAS A→ε
SELECT(S→aA)={a} SELECT(S→d)={d} SELECT(A→bAS) ={b} SELECT(A→ε) = {a, d, #}
∩= Ø
∩= Ø
YES
确定的自上而下分析思想
G4: S→Sa|b
FTRST(αi) ∩ FIRST(αj) = Ø
例: 文法中有空产生式 G6: S→ aA | d A→bAS |ε Follow(S) = { #, a, d } Follow(A) = { #, a, d} FIRST(A) ∩ FOLLOW(A) = Ø
确定 !
FIRST(aA) ∩ FIRST(d) = Ø
小结: 确定的自上而下分析
G2 : S → Ap | Bq A → a | cA FTRST(αi) ∩ FIRST(αj) = Ø B → b | dB 1. 文法中无空产生式 G6: S→ aA | d A→bAS |ε FTRST(αi) ∩ FIRST(αj) = Ø FTRST(A) ∩ FOLLOW(A) = Ø 2. 文法中有空产生式
确定的自上而下语法分析
G1: S → pA |qB A → a | cA B → b | dB
G2: S → Ap | Bq A → a | cA B → b | dB
确定 的自上而下分析的必要条件之一: A→α1|α2|…|αn FTRST(αi) ∩ FIRST(αj) = Ø
左公因子的存在产生回溯 G3: S→cAd A→ab | a 输入串 cad FIRST(ab) ∩ FIRST(a) = {a} ≠ Ø 分析过程不确定!
• FIRST集 • FOLLOW集 • SELECT集 • LL(1)判别条件
左递归产生回溯
G4: S→Sa|b 输入串 baa
FIRST(Sa) ∩ FIRST(b) = {b} ≠ Ø 分析过程不确定!
小结
- 文法中无空产生式 不确定分析
确定分析 G1 : S → pA |qB A → cAd |a B → dB |c
G3: S→cAd A→ab | a
G2 : S → Ap | Bq A → a | cA B → b | dB
A→ α1 |α2 |…|αn 输入符号a (1) 若a属于FIRST(αi ), 用αi 匹配 (2) 若a不属于任何FIRST(αi ), 则: ① 若ε∈FIRST(αi ) 且 a∈FOLLOW(A), 则让A与ε匹配. ② 否则, a的出现是一种语法错误
例: 判断文法是否为LL(1)文法
G: S→aA S→d A→bAS A→ε
FIRST(aA)={a} FIRST(d)={d} FIRST(bAS)={b} FIRST(ε)={ε} FIRST(A)={b, ε} FOLLOW(A)={#, a,d}
∩= Ø
∩= Ø ∩= Ø
YES
LL(1)文法判别 – Select 集
• 每个非终结符A的两个不同产生式, A→α, A→β 满足 SELECT(A→α) ∩ SELECT(A→β) = Ø
相关文档
最新文档