Я хотел бы добавить ключевое слово на мой язык.
Это ключевое слово должно быть найдено только во время одного конкретного правила грамматики синтаксического анализатора.
Из-за обратной совместимости я бы хотел, чтобы это ключевое слово продолжало использоваться в качестве имени переменной, то есть ему может соответствовать правило лексера, определяющее, подходит ли токен для имени переменной.
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;
;