У меня есть простая грамматика ANTLR, которую я урезал до своих основных основ, чтобы продемонстрировать эту проблему, которую я испытываю. Я использую ANTLRworks 1.3.1.ANTLR lexer не соответствует токенам
grammar sample;
assignment : IDENT ':=' NUM ';' ;
IDENT : ('a'..'z')+ ;
NUM : ('0'..'9')+ ;
WS : (' '|'\n'|'\t'|'\r')+ {$channel=HIDDEN;} ;
Очевидно, что это утверждение принимается грамматике:
x := 99;
Но это один и есть:
x := @!$()()%99***;
Выход из ANTLRworks переводчика:
ANTLR Interpreter diagram http://cs.sierracollege.edu/~barry/antlr-lexer.png
Что я делаю неправильно? Даже такие примеры грамматик, которые поставляются с ANTLR (например, грамматика CMinus), демонстрируют такое поведение.
Я следующее Сообщение об ошибке придумывают, запустив «х: = @! $()()% 99 ***; " на ваш пример: строка 1: 5 нет жизнеспособной альтернативы у персонажа '@' строка 1: 6 нет жизнеспособной альтернативы на символе '!' ... –
Вы не получаете эти сообщения? –