Регулярное выражение токена antlrV3 - PullRequest
1 голос
/ 08 февраля 2010

Могу ли я написать правило, в котором исходный токен частично фиксирован и частично универсален?

rule: ID '=' NUMBER
      ;

ID: (A.. Z | a.. Z) +

NUMBER: (0 .. 9) +

Но только если идентификатор токена имеет вид var * (var is fixed)

Спасибо

1 Ответ

2 голосов
/ 08 февраля 2010

Ты имеешь в виду это?

// Use this instead of ID in all parser rules that take either token
identifier
    :   VAR_ID | ID
    ;

VAR_ID
    :   'var' ('A'..'Z' | 'a'..'z')*
    ;

ID
    :   ('A'..'Z' | 'a'..'z')+
    ;

В любом случае : если возможно, NOT используйте строгую лексер-грамматику для сообщений об ошибках. Они медленнее и полностью неразборчивы для пользователей . Вам следует разобрать ID в непринужденной форме, а затем проверить, в правильной ли оно форме.

...