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 2014-10-07 08:42:10
Btw。我會讓'PRINTABLE'成爲解析器規則,即'可打印'。否則,將不會有'STRING','NUMBER'等令牌,因爲它們最終都會成爲'PRINTABLE'令牌。從PRINTABLE開始,單個字符標識符將是「PRINTABLE」而不是標識符。 – Onur 2014-10-07 08:47:16