¿Cómo se implementa la precedencia del operador en ANTLR?ANTLR Precedencia del operador
Estoy usando el paquete XText/Antlr en este momento.
Editar:
hice lo sepp2k sugirió, y precedencia de los operadores funciona ahora, pero cosas como 3 + * También funciona en este momento. Los operadores básicamente están "cayendo" en el árbol.
Además, probé la gramática C en el sitio web de ANTLR y sucedió lo mismo en ANTLRworks.
¿Alguien sabe cuál es el problema?
BinaryExpression:
'or'? AndOp; //or op
AndOp:
'and'? ComparisonOp;
ComparisonOp:
('>'|'<'|'>='|'<='|'=='|'~=')? ConcatOp;
ConcatOp:
'..'? AddSubOp;
AddSubOp:
('+' | '-')? MultDivOp;
MultDivOp:
('*' | '/')? ExpOp;
ExpOp:
'^'? expr=Expression;
La llamada a Expression probablemente debería estar entre '(' y ')'. Además, todos sus operadores parecen haber perdido un operando de la izquierda. – sepp2k
Lo arreglé usando el método que se encuentra en mi comentario. Además, el operando de la izquierda se ha movido a la primera expresión para evitar la recursión a la izquierda. – jameszhao00