1
我有一個ANTLR語法問題,我只是沒有看到我的問題,一直想弄明白一個多小時。我剝我的問題到這個簡單的語法:ANTLR語法問題
grammar TestGrammar;
options {
language = Java;
k=2;
}
compu_method : '/begin COMPU_METHOD' NAME NAME NAME NAME
(
(formula)
|('COEFFS' realnumber realnumber realnumber realnumber realnumber realnumber)
)*
'/end COMPU_METHOD';
formula : '/begin FORMULA' (.)* '/end FORMULA';
realnumber: (INT | FLOAT);
NAME : LETTER (LETTER|'0'..'9'|'['|']'|'.')* ;
fragment LETTER : 'A'..'Z' | 'a'..'z' | '_' ;
INT : MINUS? ('0' | '1'..'9' '0'..'9'*) ;
FLOAT : MINUS? ('0'..'9')+ '.' ('0'..'9')* Exponent? | MINUS? '.' ('0'..'9')+ Exponent? | MINUS? ('0'..'9')+ Exponent ;
MINUS : '-' ;
fragment Exponent : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;
WS : ('\r\n'|'\n'|' '|'\r'|'\t'|'\u000C') { $channel=HIDDEN;};
,我試圖以匹配輸入是:
/begin COMPU_METHOD
foo
foo
foo
foo
COEFFS 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000
/end COMPU_METHOD
口譯總是給我「不匹配輸入‘COEFFS’期待‘\ u0005’ 「
但是爲什麼?
如果我在語法中改變(公式)和('COEFFS'...)的順序,那很好,我只是不明白爲什麼?
我該如何使用調試器而不是解釋器? – metacircle
假設你正在使用ANTLRWorks:按下「CTRL + D」。如果你使用Eclipse的ANTLR插件(它使用ANTLRWorks,AFAIK的解釋器和調試器組件):我不知道。 –