Синтаксические предикаты ANTLR для JAVACC - PullRequest
1 голос
/ 03 марта 2012

В ANTLR мы можем использовать синтаксические предикаты для решения определенных проблем следующим образом. Это простой пример.

a : (L K)=> b
   | c
   ;

b : L K
   ;

c : L M
   ;

Что я хочу знать, это как добиться того же в JAVACC? Спасибо.

1 Ответ

2 голосов
/ 03 марта 2012

В javacc есть концепция SYNTACTIC LOOKAHEAD. Вы можете использовать это для достижения того же поведения.

Для примера предположим, что ваше правило грамматики выглядит следующим образом. void Expr (): {} { Call () | Вар () }

Если вам нужно заглянуть в неизвестное время, вы можете сделать что-то вроде

void Expr():
{}
{
LOOKAHEAD(Call())
Call () | Var()
}

Для получения дополнительной информации, пожалуйста, обратитесь http://javacc.java.net/doc/lookahead.html

...