Я хотел бы отобразить удобную для пользователя вставку ошибки в ANTLR4.
Вот пример допустимого текста для моего синтаксического анализатора:
aaaa AND bbb AND @FD $sysdate
Когда я удаляю доллар $, у меня естьхорошая ошибка синтаксического анализа
aaaa AND bbb AND @FD sysdate
line 1:21 mismatched input 'sysdate' expecting {' ', '$'}
Когда я делаю опечатку в sysdate, у меня появляется хорошая ошибка синтаксического анализа
aaaa AND bbb AND @FD $sysABCdate
line 1:22 token recognition error at: 'sysABCdate'
line 1:32 missing {'sysdate', 'SYSDATE'} at '<EOF>'
Когда я пропускаю AND перед @ FD
aaaa AND bbb YYY @FD $sysdate
У меня есть фактическое сообщение об ошибке
line 1:0 token recognition error at: 'aaaa AND bbb YYY @FD $sysdate'
line 1:29 mismatched input '<EOF>' expecting BODY_WITH_FIELD_CODE
, в то время как я ожидал бы что-то более удобное для пользователя, например
token error at YYY, missing {'AND'}
Вот мое определение ANTLR
//rules
mainQ : base EOF ;
base : BODY_WITH_FIELD_CODE filling_date_condition;
filling_date_condition : ' '* sys_date_minus_number;
sys_date_minus_number : sys_date_with_dollar_prefix;
sys_date_with_dollar_prefix : '$'('sysdate'|'SYSDATE');
//TOKENS
BODY_WITH_FIELD_CODE : .+? ('and'|'AND') WS+ FD_WITH_AT;
FD_WITH_AT : '@' FD;
fragment WS : ' ';
fragment FD : 'fd'|'FD';