我有一个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'...)的顺序,那很好,我只是不明白为什么?
答案 0 :(得分:1)
修复错误后(N
中有一个无效的compu_method
令牌,并且您在formula
规则后忘记了一个半冒号),解析输入时没有问题。我得到以下解析树:
请注意,我使用的是调试器,而不是解释器(这是错误的)。所以你的问题可能就是你使用了解释器。