非LL(1)文法到LL(1)文法的变换---编译原理

LL(1)文法的性质

  • 无二义性
  • 不含左递归
  • 不含公共左因子

1.消除左递归

非LL(1)文法到LL(1)文法的变换---编译原理
非LL(1)文法到LL(1)文法的变换---编译原理

简单讲就是将左递归转变成右递归

例:

非LL(1)文法到LL(1)文法的变换---编译原理

2.提取左因子

非LL(1)文法到LL(1)文法的变换---编译原理

例:

非LL(1)文法到LL(1)文法的变换---编译原理

非LL(1)文法转变成LL(1)后还需判断一下是否为LL(1)

详见求FIRST()FOLLOW()以及LL(1)文法的判别—编译原理