2013-06-11 2 views
0

У меня есть проблемы запуска входного потока для моей грамматики, здесь является часть моей грамматикиAntlr4: посторонний вход в antlr4

expression 
: .... 
| ('+' | '-' | '&' |) expression 
| expression ('+'|'-') expression 
    .... 
; 

, когда входной поток, как 2 + 2-2 или (2 + 2 + 2) - 2, возникает ошибка

line 10:30 extraneous input '-2' expecting {',', '^',...} 

Почему моя грамматика не может отличить от -2 до 2-2? помогите мне, пожалуйста!

ответ

2

похоже, что вы написали свой лексер таким образом, что -2 приводит к одному токену. Вместо того, чтобы обрабатывать отрицательные числа таким образом, обрабатывайте - как унарный оператор и позволяйте вашему парсеру обрабатывать операцию отрицания. Если вы пытаетесь справиться с отрицательными числами непосредственно в лексическом, таких как вход 2-2 будет отправлен анализатору как 2 последовательных лексемы чисел (2 следует -2) вместо желаемых 3 токенов (2, -, 2).

+0

Извините, но я просто скопирую часть java.g4 (только правило выражения) из примера книги примера antlr v4. Можете ли вы дать мне пример, чтобы решить это? – wied

+0

ok, я знаю, что вы имеете в виду, потому что я добавил префикс в DECIMAL_LITERAL : \t ('-')? ('0' | '1' .. '9' '0' .. '9' *) IntegerTypeSuffix? ; спасибо, сэм. – wied

Смежные вопросы