У меня проблемы с моей грамматикой Antlr. Я пытаюсь написать правило синтаксического анализа для 'typedident', которое может принимать следующие входные данные:
'int a' или 'char a'
Имя переменной 'a' взято из моего правила лексера 'IDENT', которое определено следующим образом:
IDENT : (('a'..'z'|'A'..'Z') | '_') (('a'..'z'|'A'..'Z')|('0'..'9')| '_')*;
Мое правило синтаксического анализа 'typedident' выглядит следующим образом:
typedident : (INT|CHAR) IDENT;
INT
и CHAR
определены как токены.
Проблема, с которой я сталкиваюсь, заключается в том, что при тестировании 'typedident' имя переменной должно содержать более одного символа. Например:
'int a'
не принимается, а 'int ab'
принимается.
Я получаю предполагаемую ошибку:
"MismatchedTokenException: несоответствующий ввод" a ", ожидающий" $ ""
Есть идеи, почему я получаю эту ошибку? Я новичок в Antlr, поэтому извиняюсь, если ошибка тривиальна.
EDIT
Я буквально только что заработал, и я не знаю почему. У меня также было два других правила лексера, определенных следующим образом:
ALPH : ('a'..'z'|'A'..'Z');
DIGIT : ('0'..'9');
Я понял, что они вообще не использовались, поэтому я удалил их, и теперь все работает отлично! Я думаю, почему это работает, потому что ALPH
и DIGIT
переопределяли мои другие правила Lexer:
NUMBER : ('0'..'9')+;
CHARACTER : '\'' (~('\n' | '\r' |'\'')) '\'';
Кто-нибудь знает, так ли это? Мне любопытно, почему эта проблема теперь решена.