JavaCC:将LOOKAHEAD编号应用于单个选项列表中的所有选项

时间:2014-11-01 21:39:15

标签: javacc ambiguity

对于JavaCC,我希望在单个选项列表中为所有选项预测3。也就是说,我可以做到:

LOOKAHEAD(3) A() | LOOKAHEAD(3) B | LOOKAHEAD(3) C

但我更喜欢做类似的事情:

LOOKAHEAD(3) ( (A) | B() | C() )

查看JavaCC 5.0 examples / demos包中的examples/JavaGrammars/1.5/Java1.5.jj文件,我看到代码 * ,如:

( LOOKAHEAD(3) ( (A) | B() | C() ) )

然而,这会给我发出警告Encountered LOOKAHEAD(...) at a non-choice location. This will be ignored.,否则无效。

* :具体来说,是Modifiers规则,第1104行。

1 个答案:

答案 0 :(得分:2)

这样做的方法是

LOOKAHEAD(3) A() | LOOKAHEAD(3) B() | C()

这意味着:

if the next three tokens are compatible with A()
    A()
else if the next three tokens are compatible with B()
    B()
else if the next token is compatible with C()
    C()
else error

请参阅the JavaCC lookahead tutorial