对于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行。
答案 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