0
У меня есть эта грамматика:ANTLR Выдает ошибку, но грамматика функциональна
grammar Flow;
@header { import java.util.HashMap; }
@members { HashMap<String, String> vars = new HashMap<>(); }
WS: (' '|'\n'|'\r'|'\t') -> skip;
flow: (print|var)+ EOF;
print: 'print' (toPrint=PRINTABLE { System.out.println($toPrint.text); })|(id=ID {
if (vars.containsKey($id.text)) {
System.out.println(vars.get($id.text));
} else {
System.err.println("This variable is not assigned!");
}
});
var: 'var' id=ID '=' val=PRINTABLE { vars.put($id.text, $val.text); };
PRINTABLE: STRING|NUMBER|LETTER|DIGIT;
STRING: '"' (.)*? '"';
fragment LETTER: ('a'..'z'|'A'..'Z');
fragment DIGIT: ('0'..'9');
NUMBER: DIGIT+ ('.' DIGIT+)?;
ID: LETTER (LETTER|DIGIT)*;
Когда я взываю правило запуска «поток» и ввести некоторые действительные переменную и попытаться напечатать его, TestRig кидает ошибку:
линии 2: 6 отсутствует ПЕЧАТЬ на «выходе»
Но все работает хорошо. Как заблокировать эти досадные ошибки?
Благодарим за отзыв!
Может Вы публикуете ввод образца? – Onur
КПП. Я бы сделал 'PRINTABLE' правилом парсера, т. Е.' Printable'. В противном случае не будет токенов для 'STRING',' NUMBER' и т. Д., Так как все они станут токенами «PRINTABLE». Также единственным символьным идентификатором будет «PRINTABLE», а не идентификатор, так как первым приходит «PRINTABLE». – Onur