文法G是 LL(1) 的充要条件:
对于 G 的每个非终结符 A 的
任何两个不同的产生式 A → α|β
1) FIRST(α) ∩ FIRST(β) = φ
2) 如果 β==*>ε,则 FISRT(α) ∩ FOLLOW(A) = φ
预测分析表的构造算法
1.对于每一产生式 A→α,作 2.和3.
2.对于 FIRST(α)中的每一终结符a, 将 A→α 填入 M[A,a]
3.如果ε属于 FIRST(α),则将 A→α填入 FOLLOW(A)中任一元素 b 的 M[A,b];
4.将所有无定义的 M[A,b] 标上错误标志。
1) 编写文法,消除二义性;
2) 消除左递归、提取左因子;
3) 求 FIRST 集和 FOLLOW 集
4)按照 LL(1) 文法构造预测分析表
5)如果某表项填写了多个产生式
说明该文法不是 LL(1) 文法
说明文法的复杂性超过自顶向下方法的分析能力
6)实现预测分析器
对于 G 的每个非终结符 A 的
任何两个不同的产生式 A → α|β
1) FIRST(α) ∩ FIRST(β) = φ
2) 如果 β==*>ε,则 FISRT(α) ∩ FOLLOW(A) = φ
预测分析表的构造算法
1.对于每一产生式 A→α,作 2.和3.
2.对于 FIRST(α)中的每一终结符a, 将 A→α 填入 M[A,a]
3.如果ε属于 FIRST(α),则将 A→α填入 FOLLOW(A)中任一元素 b 的 M[A,b];
4.将所有无定义的 M[A,b] 标上错误标志。
1) 编写文法,消除二义性;
2) 消除左递归、提取左因子;
3) 求 FIRST 集和 FOLLOW 集
4)按照 LL(1) 文法构造预测分析表
5)如果某表项填写了多个产生式
说明该文法不是 LL(1) 文法
说明文法的复杂性超过自顶向下方法的分析能力
6)实现预测分析器