4.1确定的自顶向下分析思想p68 n基本方法 U对任何输入串,试图从开始符号出发,自上而下地为输入串建立 一棵语法树,或者说为输入串寻找一个最左推导。 n若有文法G1[S]: n若有文法G2[S]: n若有文法G3[S]: u SpA gB uS→Ap Bq u SaA d uA→cAda uA→cAa uA→bAS uB→dBb uB→dB|b n 判断输入串W=abd? n判断输入串W=pccadd? n 判断输入串W=ccap? n过程本质 U某文法符号对应当前输入符号时,有唯一的产生式进行替换并向下推导。 nLL(1)文法 u(A,a)A是语法树上准备进行推导的符号,a是面临的输入符号。 u如果我们知道所有候选式的SELECT(A→a)、所有候选式FIRST(a)、所有 非终结符号FOLL0W(A)。 u当有产生式:A→a1a2.|an SELECT(A→a)∩SELECT(A→a)=Φ
6 4.1 确定的自顶向下分析思想p68 n 过程本质 u 某文法符号对应当前输入符号时,有唯一的产生式进行替换并向下推导。 n 若有文法G1[S]: u S→pA|qB u A→cAd|a u B→dB|b n 判断输入串W=pccadd? n 若有文法G2[S]: u S→Ap|Bq u A→cA|a u B→dB|b n 判断输入串W=ccap? n 基本方法 u 对任何输入串,试图从开始符号出发,自上而下地为输入串建立 一棵语法树,或者说为输入串寻找一个最左推导。 n 若有文法G3[S]: u S→aA|d u A→bAS|ε n 判断输入串W=abd? n LL(1)文法 u (A, a) A是语法树上准备进行推导的符号,a是面临的输入符号。 u 如果我们知道所有候选式的SELECT(A→α)、所有候选式FIRST(α)、所有 非终结符号FOLLOW(A)。 u 当有产生式:A→α1| α2 |.| αn SELECT(A→αi)∩SELECT(A→αj)= φ
LL(1)分析p71 n含义 u第一个L表示从左向右扫描输入符号串; U第二个L表示生成最左推导; u1表示读入一个符号可确定下一步推导。 nLL(1)文法能够对输入串进行有效的。 n无回溯的自上而下分析。 可)
7 LL(1)分析 p71 n 含义 u第一个 L 表示从左向右扫描输入符号串; u第二个 L 表示生成最左推导; u1 表示读入一个符号可确定下一步推导。 n LL(1)文法能够对输入串进行有效的。 n 无回溯的自上而下分析
FIRST(a)集合的定义p69 n设G(VT,VN,S,P)a∈V* n FIRST(a)={aa==*>aB,aE VT} a u若a=*>e,则e∈FIRST(a) uFIRST(a)是a的所有可能推导的首遇终结 符号或e,是选择产生式的依据。 S→ApBq nFIRST (Ap)={a,c} A→cAa Ap-=>apAp==>cAp B→dBb nFIRST (Bq)={b,d} Bg ==>bqBq==>dBq n因为S的两个候选式FIRST(Ap)∩FIRST(Bq)=Φ,所以 当$与面临的输入符号i匹配时,可能出现几种选择? (1)i∈FIRST(Ap),选择S→Ap匹配 (2)i∈FIRST(Bq),选择S→Bq匹配(3)出错
8 FIRST(α)集合的定义p69 n 设G=(VT,VN,S,P) α∈V* n FIRST(α)={a|α==*> aβ,a∈VT} u若α==*>ε,则ε∈FIRST(α) uFIRST(α)是α的所有可能推导的首遇终结 符号或ε,是选择产生式的依据。 α a . S→Ap|Bq A→cA|a B→dB|b nFIRST(Ap) ={ a,c } Ap==>ap Ap==>cAp nFIRST(Bq) ={ b,d} Bq ==>bq Bq==>dBq n 因为S的两个候选式FIRST(Ap)∩ FIRST(Bq)=φ,所以 当S与面临的输入符号i匹配时,可能出现几种选择? (1)i∈FIRST(Ap),选择S→Ap匹配 (2)i∈FIRST(Bq),选择S→Bq匹配 (3)出错
F0LL0W(A)集合的定义D70 A∈VN nF0LL0W(A)={a|S=*>.Aa.,a∈Vr} U若S=>.A,则#∈FOLLOW(A) ☑#一输入串的结束符也可看作是句子的括号S# U FOLLOW(A)表示了句型中可能紧跟在A后面的终结符号 S→aAd n#∈FOLLOW(A)S=>aA A→bASe n aEFOLLOW (A)S==>aA==>abAS==>abAaA n dEFOLLOW(A)S==>aA==>abAS==>abAd n 因为A的两个候选式FIRST(bAS)∩FOLL0W(A)=Φ,所以 当A与面临的输入符号1匹配时,可能出现几种选择? (1)i∈FIRST(bAS),选择A→bAS匹配 (2)i∈F0LL0W(A),选择A→e自动匹配(3)出错 K
9 FOLLOW(A)集合的定义 p70 A∈VN n FOLLOW(A)={ a|S==*>.Aa. ,a∈VT } u若S==*>.A,则#∈FOLLOW(A) Ø#—输入串的结束符 也可看作是句子的括号 #S# uFOLLOW(A)表示了句型中可能紧跟在A后面的终结符号 S .Aa. S→aA|d A→bAS|ε n a∈FOLLOW(A) S==>aA==>abAS==>abAaA n d∈FOLLOW(A) S==>aA==>abAS==>abAd n #∈FOLLOW(A) S ==> aA n 因为A的两个候选式FIRST(bAS)∩FOLLOW(A)=φ,所以 当A与面临的输入符号i匹配时,可能出现几种选择? (1)i∈FIRST(bAS),选择A→bAS匹配 (2)i∈FOLLOW(A),选择A→ε自动匹配 (3)出错
SELECT(A→a)集合的定义p71 n设G(Vr,VN,S,P)a∈V* n FIRST(a)={aa==*>aB,ae VT} u若a立*>e,则SELECT(A→a)=FIRST(a) u若a=*>e,则SELECT(A→a) =(FIRST(a)-{e})UFOLLOW(A) S→aAd nFOLLOW (A)={a,d,#) AbAS nSELECT (A bAS)=FIRST (bAS)={b} nSELECT(A→e) S→aAd nFOLLOW (A)={a,d,#FIRST(K)={c,e} A→bASK nSELECT (A -bAS)=FIRST(bAS)={b} K→ce nSELECT(A→K) =(FIRST(K)-e)UFOLLOW (A)={c,a,d,#} KD
10 SELECT(A→α)集合的定义 p71 n 设G=(VT,VN,S,P) α∈V* n FIRST(α)={a|α==*> aβ,a∈VT} u若α==*>ε,则SELECT(A→α)= FIRST(α) S→aA|d A→bAS|K K→c|ε nFOLLOW(A)={a,d,#} nSELECT(A →bAS)=FIRST(bAS)={b} nSELECT(A→ε) =(FIRST(ε)-ε) ∪FOLLOW(A)={a,d,#} S→aA|d A→bAS|ε nFOLLOW(A)={a,d,#} FIRST(K)={c, ε} nSELECT(A→bAS)=FIRST(bAS)={b} nSELECT(A→K) =(FIRST(K)-ε) ∪FOLLOW(A)={c,a,d,#} u若α==*>ε,则SELECT(A→α) = (FIRST(α)-{ε})∪FOLLOW(A)