Ich habe eine sehr einfache Test Grammatik, wie folgend:AnTLR4 seltsames Verhalten in Vorrang
grammar Test;
statement: expression EOF;
expression
: Identifier
| expression binary_op expression
| expression assignment_operator expression
| expression '.' Identifier
;
binary_op: '+';
assignment_operator : '=' ;
Identifier : [a-zA-Z]+ ;
WS : [ \n\r\t]+ -> channel(HIDDEN) ;
Mit dieser Version der Grammatik ich das erwartete Verhalten bekam, wenn ich schreibe den folgenden Code:
b.x + b.y
ich bekomme einen Baum als (+ (. b x) (. b y))
wenn ich jedoch expression binary_op expression
ersetzen durch expression '+' expression
ich einen ganz anderen Baum erhalten: (. (+ (. b x) b) y)
Gibt es eine Erklärung dafür?
Dank
Es macht keinen Unterschied, die Literale von Parser-Regeln zu Lexer-Regeln zu verschieben. Ich habe getestet. :) – pinker