2010-02-08 2 views
1

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

rule: ID '=' NUMBER 
     ; 

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

NUMBER: (0 .. 9) + 

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

Благодаря

+0

Что такое * 'Но только если идентификатор токена находится в форме var \ * (в регулярном выражении, где var является фиксированным)' * означает? –

+0

мне нужен анализатор для кода: Vara = 3 Варе = 5 varDF = 3 ... где вар фиксируется, в противном случае я буду уведомлен исключение – Boo

+0

Ах, я вижу. Ну, тогда 280Z28 ответил на ваш вопрос. –

ответ

2

вы имеете в виду это сделать?

// 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')+ 
    ; 

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

+0

Спасибо. Но идентификатор токена присутствует в других правилах, и мне нужно, чтобы он оставался общим. – Boo

+1

@Boo: Если вы будете следовать моему * сильному * предложению, оно все равно останется общим. –

+0

- это то, что мне нужно, если вы говорите, что делаете это в парсере. Пожалуйста, держите меня, вы можете отправить пример? Я не эксперт в АНТЛР ... Большое спасибо. – Boo

Смежные вопросы