LL(1)文法的定义p71 n一个上下文无关文法是LL(1)文法的充分必要条件是, 对每个非终结符的两个不同的产生式,A→a,A→B ,满足:SELECT(A→a)∩SELECT(A→B)=Φ S→aAd 求所有SELECT集合: A→bAS nSELECT (S-aA)=FIRST(aA)={a} nSELECT(S -d)=FIRST (d)={d} nSELECT (A -bAS)=FIRST (bAS)={b} nSELECT(A→e) n =(FIRST(e)-8) LIDOIIOW 求每个非终结符不同产生式SELECTI的交集: nSELECT(S→aA)∩SELECT(S→d)=Φ nSELECT(A→bAS)∩SELECT(A→e)=Φ 所以,该文法是LL(1)文法。 11 ☒D
11 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(A→e) 一的产生式去匹 =(FIRST(e)-e)UFOLLOW (A)={a,b} 配。 求每个非终结符不同产生式SELECT的交集: nSELECT(S→aAS)∩SELECT(S→b)=Φ nSELECT(A→bA)∩SELECT(A →e)=b}≠Φ 所以,该文法不是LL(1)文法
12 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∈FIRST(ai),则指派ai去执行任务 2)若a不属于任何候选首符集,则: ①若e属于某个FIRST(a:)且 a∈F0LL0W(A),则让A与e自动匹配 ②否则,a的出现是一种语法错误 章节目录 13 ☑
13 LL(1)分析 n 对于文法G,当面临的输入符号为a,要用 非终结符A进行匹配时,假设A的所有产生 式为 A→α1| α2 |.| αn 1)若a∈FIRST(αi ),则指派αi去执行任务 2)若a不属于任何候选首符集,则: ①若ε属于某个FIRST(αi )且 a∈FOLLOW(A),则让A与ε自动匹配 ②否则,a的出现是一种语法错误 章节目录
4.2 LL(1)文法的判别p72 n FIRST:集合的计算 n FOLL0W集合的计算 n SELECT:集合的计算 nLL(1)文法的判别举例 nLL(1)文法判别课堂练习 章节目录
14 4.2 LL(1)文法的判别p72 nFIRST集合的计算 nFOLLOW集合的计算 nSELECT集合的计算 nLL(1)文法的判别举例 nLL(1)文法判别课堂练习 章节目录
FIRST(a)的计算法 定义和关系图p73 n FIRST(a)={a|a==*>a.,a∈Vr} u若a=*>e,则e∈FIRST(a) n计算文法符号X的FIRST(X) n计算文法符号串a=X1X2.Xn的FIRST(a) 15 同
15 FIRST(α)的计算法 ——定义和关系图 p73 n FIRST(α)={ a|α ==*> a .,a∈VT } u若α ==*>ε,则ε∈ FIRST(α) n 计算文法符号X的FIRST(X) n 计算文法符号串α=X1X2.Xn的FIRST(α)