ANTLR Соответствие всем токенам, кроме - PullRequest
0 голосов
/ 17 августа 2011

Есть ли способ сопоставить токен в antlr, кроме определенного?

У меня есть правило, которое гласит, что '_' может быть идентификатором. Теперь у меня есть конкретная ситуация, в которой я хочу сопоставить идентификатор, но в данном конкретном случае я хочу, чтобы он игнорировал альтернативу '_'. Возможно ли это?

1 Ответ

1 голос
/ 19 августа 2011

Я думаю, что-то вроде

(ID {!$ID.text.equals("_")}?)

должно сделать это (если вы используете Java в качестве целевого языка).В противном случае вам придется написать этот семантический предикат так, чтобы ваш язык его понимал.

Короче говоря, это проверит, не равен ли текст "_", и только тогдаsubrule match.

Другой возможный способ сделать это:

id: ID
  | '_'
  ;

ID: // lexer rule to match every valid identifier EXCEPT '_' ;

Таким образом, всякий раз, когда вы имеете в виду «_» или любой другой идентификатор », вы используете id, чтобы сопоставить это, если вы запретите "_", вы можете использовать _.

...