编译原理第五章分析.ppt

5.3 某些非LL(1)文法到LL(1)文法的等价交换 确定的自顶向下分析要求对给定语言的文法必须是LL(1)形式。 但是,不是所有的语言都有LL(1)文法。 不是LL(1)文法的原因,要么是直接或间接左递归;要么含有左公共因子。 左公共因子:文法中形如A→αβ|αγ 直接左递归:A→Aβ; 间接左递归:A→Bβ;B→Aα 消除左递归或左公共因子,能否将非LL(1)文法转换成LL(1)文法? 提取左公共因子 若文法中含有形如:A→αβ|αγ的产生式,这导致了对相同左部的产生式其右部的FIRST集相交,不满足LL(1)文法的充分必要条件。 将产生式A→αβ|αγ等价变换为: A→α(β|γ) 引进新的非终结符A’,使产生式变换为: A→αA’;A ’→ β|γ 一般形式为: A→αβ1|αβ2|αβ3|….|αβn 提取左公因子: A→α(β1|β2|β3|….|βn) 引进新非终结符A’: A→αA’; A’→β1|β2|….|βn 若β1β2β3….βn中仍含有左公共因子,可再次提取,这样反复进行提取,直到引进新非终结符的有关产生式再无左公共因子为止。 例5. 6 (提取左公共因子后为非LL(1)) 若文法G1的产生式为: (1)S→αSb (2) S→αS (3) S→ ε; 对(1)(2)提取左公共因子后得: S→αS(b| ε) S→ ε; 进一步变换为文法G‘1 S→αS

文档评论(0)

1亿VIP精品文档

相关文档