Я очень новичок в XText. Поэтому, пожалуйста, прости меня, если я использую неправильную терминологию.
В нашем коде есть грамматика XText, описывающая список ключей-значений.
KeyValues:
{KeyValues}
('version' KeyValuesVersion=VERSION ';')?
KeyValues+=KeyValue*;
KeyValue:
name=ID '=' value=STRING ('[' speechs+=Speech (',' speechs+=Speech)* ']')? ('short=' short=STRING)? ';'
;
Speech:
value=STRING
;
terminal VERSION returns ecore::EString:
('0'..'9')+ '.' ('0'..'9')+ '.' ('0'..'9')+
;
@Override
terminal ID:
('a'..'z'|'A'..'Z'|'_'|'-'|'.') ('a'..'z'|'A'..'Z'|'_'|'-'|'0'..'9'|'.')*
;
Почти все работает, как ожидалось.
Однако есть одна проблема, которую я не знаю, как ее решить.
В случае, если ключ содержит символы, которые не соответствуют регулярному выражению идентификатора (например, 1key = "value"), мы простосм "отсутствует EOF в '1' (org.eclipse.xtext.diagnostics.Diagnostic.Syntax)" .
Есть ли возможность перехватить этот EOF-ошибка и так, чтобы выдать сообщение типа «Ключ недействителен, он может содержать только следующие символы ...»?
Заранее спасибо.