Я хотел бы добавить ключевое слово на мой язык.Есть ли механизм в Antlr, чтобы лексер мог сопоставлять токен только во время определенных правил?
Это ключевое слово должно соответствовать только одному правилу грамматики парсера.
Из-за обратной совместимости я хотел бы разрешить этому ключевому слову продолжать использоваться как имя переменной, т. Е. Оно может быть согласовано с правилом lexer, которое определяет, подходит ли токен для имени переменной.
Lexer соответствует новому правилу всякий раз, когда он находится в файле.
Является ли подходящим способом для этого изменить правило var_declaration, чтобы оно соответствовало идентификаторам IDENT или новым маркерам KEYWORD?
protected
modified_var_declaration:
VAR (IDENT|KEYWORD);
;
Соответствующие правила:
IDENT // matches variable names
options { testLiterals=true; }
: ('_' | 'a'..'z' | 'A'..'Z') ('_' | 'a'..'z' | 'A'..'Z' | DIGIT)*
;
KEYWORD: // my new keyword
"key"
;
правило синтаксического анализа для создания переменной является:
protected
var_declaration:
VAR IDENT;
;
хорошо работает для меня. – chollida