2014-11-01 8 views
1

С помощью JavaCC я хочу иметь 3 варианта для всех вариантов в одном списке выбора. То есть, я мог бы сделать:JavaCC: примените номер LOOKAHEAD ко всем вариантам в одном списке выбора

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

Но я бы предпочел, чтобы сделать что-то вроде:

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

Глядя в файле examples/JavaGrammars/1.5/Java1.5.jj в пакете JavaCC 5.0 Примеры/демок, я вижу код * это как:

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

Однако, что получает мне предупреждение Encountered LOOKAHEAD(...) at a non-choice location. This will be ignored. и в противном случае не имеет никакого эффекта.

*: В частности, Modifiers правило, линия 1104.

+0

Пример, приведенный в примерах/JavaGrammars/1.5/Java1.5.jj, находится в цикле. Взгляд 2 используется для принятия решения о том, следует ли (повторно) вводить цикл. Очевидно, что последующие варианты можно решить с помощью стандартного представления 1. –

ответ

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.