SELECT(A→a)集合的定义p71 n设G=(Vr,VN,S,P)a∈V* n对每一个产生式:A→a u若a三)e则SELECT(A→a)=FIRST(a) u若a=>e则SELECT(A→a)=(FIRST(a)-e})UFOLL0W(A) S→aAd nFOLLOW (A)={a,d,# nSELECT (A -bAS)=FIRST(bAS)=(b} A→bASe nSELECT(A-e)=(FIRST (e)- 是LL(1)文法 e }UFOLLOW(A)={a,d,# n因为:SELECT(A→bAS)SELECT(A→e)=Φ S→aAd nFIRST (K)={c,e} A→bASK nFOLLOW (A)={a,d,#FOLLOW (K)={a,d,# nSELECT(K-c)=FIRST (c)={c} K→ce nSELECT (Ke)=(FIRST (K)-{e})UFOLLOW(A)={c,a,d,#} n因为:SELECT(K→c)∩SELECT(K→e)、Φ 不是LL(1)文 法 6 ☑D☑
6 SELECT(A → α)集合的定义 p71 n 设G=(VT,VN,S,P) α∈V* n 对每一个产生式:A→α u 若α==*>ε则SELECT(A→α)= FIRST(α) S → aA|d A → bAS|K K → c|ε 不是LL(1)文 法 nFOLLOW(A)={a,d,#} nSELECT(A →bAS)=FIRST(bAS)={b} nSELECT(A →ε)=(FIRST(ε)- {ε})∪FOLLOW(A)={a,d,#} n因为:SELECT(A →bAS)∩SELECT(A →ε)=φ S → aA|d A → bAS|ε 是LL(1)文法 nFIRST(K)={c, ε} nFOLLOW(A)={a,d,#} FOLLOW(K)={a,d,#} nSELECT(K →c)=FIRST(c)={c} nSELECT(K →ε)=(FIRST(K)-{ε}) ∪FOLLOW(A)={c,a,d,#} n因为:SELECT(K →c)∩SELECT(K →ε) == φ u 若α==*>ε则SELECT(A→α)=(FIRST(α)-ε})∪FOLLOW(A)
LL(1)文法的定义p71 一个上下文无关文法是LL(1)文法的充分必要条件是, 对每个非终结符的两个不同的产生式,A→a,A→B ,满足:SELECT(A→a)∩SELECT(A→B)=Φ S→aAd 求所有SELECT:集合: A→bASe nSELECT(S-aA)=FIRST(aA)={a} nSELECT(S-d)=FIRST(d)={d} nSELECT (A -bAS)=FIRST (bAS)={b} nSELECT(A→e) =(FIRST(e)-e)UFOLLOW(A)={a,d,# 求每个非终结符不同产生式SELECTI的交集: nSELECT(S→aA)∩SELECT(S→d)=Φ nSELECT(A→bAS)∩SELECT(A→e)=Φ 所以,该文法是LL(1)文法。 可回
7 LL(1)文法的定义 p71 n 一个上下文无关文法是LL(1)文法的充分必要条件是, 对每个非终结符的两个不同的产生式,A→α,A→β ,满足:SELECT(A→α)∩SELECT(A→β)= φ 求所有SELECT集合: nSELECT(S→aA)=FIRST(aA)={a} nSELECT(S →d)=FIRST(d)={d} nSELECT(A →bAS)=FIRST(bAS)={b} nSELECT(A →ε) n =(FIRST(ε)-ε) ∪FOLLOW(A)={a,d,#} S → aA|d A → bAS|ε 求每个非终结符不同产生式SELECT的交集: nSELECT(S→aA)∩SELECT(S →d)=φ nSELECT(A →bAS)∩SELECT(A →ε)=φ 所以,该文法是LL(1)文法
LL(1)文法的定义p71 n一个上下文无关文法是LL(1)文法的充分必要条件是, 对每个非终结符的两个不同的产生式,A→a,A→B ,满足:SELECT(A→a)∩SELECT(A→B)=Φ S→aASb nFOLLOW (A)={a,b} A→bAe 求所有SELECT集合: nSELECT(S-aAS)=FIRST(aAS)={a} 存在问题: nSELECT(S -b)=FIRST (b)={b} n当A面临输入符 nSELECT (A-bA)=FIRST (bA)=(b} 号b时,无法用唯 nSELECT(Ae) 一的产生式去匹 n =(FIRST(e)-e)UFOLLOW(A)={a,b} 配。 求每个非终结符不同产生式SELECT的交集: nSELECT(S→aAS)∩SELECT(S→b)=Φ nSELECT(A→bA)∩SELECT(A→e)={b}≠Φ 所以,该文法不是LL(1)文法。 ☒D
8 LL(1)文法的定义 p71 n 一个上下文无关文法是LL(1)文法的充分必要条件是, 对每个非终结符的两个不同的产生式,A→α,A→β ,满足:SELECT(A→α)∩SELECT(A→β)= φ nFOLLOW(A)={a,b} 求所有SELECT集合: nSELECT(S→aAS)=FIRST(aAS)={a} nSELECT(S →b)=FIRST(b)={b} nSELECT(A →bA)=FIRST(bA)={b} nSELECT(A →ε) n =(FIRST(ε)-ε) ∪FOLLOW(A)={a,b} S → aAS|b A → bA|ε 求每个非终结符不同产生式SELECT的交集: nSELECT(S→aAS)∩SELECT(S →b)=φ nSELECT(A →bA)∩SELECT(A →ε)={b}≠φ 所以,该文法不是LL(1)文法。 存在问题: n当A面临输入符 号b时,无法用唯 一的产生式去匹 配
LL(1)分析 n对于文法G,当面临的输入符号为a,要用非 终结符A进行匹配时,假设A的所有产生式为 A→a1a2.an 1)若a∈SELECT(A→a:),则指派a去匹配 2)否则,a的出现是一种语法错误 章节目录
9 LL(1)分析 n 对于文法G,当面临的输入符号为a,要用 非 终结符A进行匹配时,假设A的所有产生 式为 A→α1| α2 |.| αn 1)若a∈SELECT(A →αi ),则指派αi去匹配 2)否则,a的出现是一种语法错误 章节目录
4.2LL(1)文法的判别p72 n FIRST:集合的计算 n FOLLOW:集合的计算 n SELECT集合的计算 nLL(1)文法的判别举例 nLL(1)文法判别课堂练习 章节目录 10 ☑
10 4.2 LL(1)文法的判别 p72 n FIRST集合的计算 n FOLLOW集合的计算 n SELECT集合的计算 n LL(1)文法的判别举例 n LL(1)文法判别课堂练习 章节目录