Я следую книге «Полный справочник по ANTLR4» и решил добавить пару ключевых слов в грамматику своего калькулятора, чтобы помочь очистить память. Построение грамматики и компиляция полученного java-кода работает нормально, но когда я выполняю код посетителя, я получаю ошибку: "line 6:0 extraneous input '$rem' expecting {<EOF>, '(', ID, INT, NEWLINE}"
и то же самое для '$clearmem'
в строке 8:0.
Вот мой файл грамматики:
grammar LabeledExpr;
//Parser rules=================================
prog: kword+
| stat+
;
stat: expr endl # printExpr
| ID '=' expr endl # assign
| NEWLINE # blank
;
expr: expr op=('*'|'/') expr # MulDiv
| expr op=('+'|'-') expr # AddSub
| INT # int
| ID # id
| '(' expr ')' # parens
;
kword: '$clearmem' endl #clearMem
| '$rem' ID endl #remVar
;
endl: NEWLINE
| EOF
;
//Lexer rules==================================
ID: [a-zA-Z]+ ;
INT: [0-9]+ ;
NEWLINE: '\r'? '\n' ;
WS: [ \t]+ -> skip;
MUL: '*' ;
DIV: '/' ;
ADD: '+' ;
SUB: '-' ;
И файл .expr с кодом для разбора:
193
a = 5
b = 6
a
b
$rem a
a
$clearmem
Я только начал работать с ANTLR4 прошлой ночью, поэтому я действительно не знаю, что искать в отношении ошибок, но из того, что я могу сказать, с обоими файлами все в порядке.
Я уверен, что мне не хватает чего-то довольно простого, но я могу это найти, поэтому я был бы признателен за помощь всем, кто более знаком с ANTLR4.
Спасибо.