执行ll(k)到ll(1)转换器!

时间:2010-06-10 05:24:27

标签: compiler-construction implementation

是否有ll(k)到ll(1)转换器的任何实现?

1 个答案:

答案 0 :(得分:4)

IIRC;一般来说,不是因为某些语言有ll(k)语法但没有ll(1)语法。因此,除非我弄错了,否则并非所有ll(k)都可以转换为ll(1)。但是,这并没有说明这种工具是否可以用于可以完成的情况。


左分解的规则是:

A := A B |
     A C |
     D |
     E ;

变成:

A := (D | E) (B | C)*

或者如果您不允许()组和*

A := D A'
     E A'

A' := B A' |
      C A' |
      nul ;

技巧变成了如何处理动作规则的翻译;如果你的语言支持它,lambdas在那里可以派上用场。