Comment la priorité de l'opérateur est-elle implémentée dans ANTLR? J'utilise le paquet XText/Antlr pour le moment.ANTLR Operator Precedence
Edit:
Je l'ai fait ce que sepp2k a suggéré, et la priorité des opérateurs fonctionne maintenant, mais des choses comme 3 + * aussi travailler maintenant. Les opérateurs sont en train de "tomber" dans l'arbre.
En outre, j'ai essayé la grammaire C sur le site Web d'ANTLR et la même chose s'est produite dans ANTLRworks.
Quelqu'un sait quel est le problème?
BinaryExpression:
'or'? AndOp; //or op
AndOp:
'and'? ComparisonOp;
ComparisonOp:
('>'|'<'|'>='|'<='|'=='|'~=')? ConcatOp;
ConcatOp:
'..'? AddSubOp;
AddSubOp:
('+' | '-')? MultDivOp;
MultDivOp:
('*' | '/')? ExpOp;
ExpOp:
'^'? expr=Expression;
L'appel à l'expression devrait probablement être entre '(' et ')'. Vos opérateurs semblent également tous manquer un opérande de gauche. – sepp2k
Je l'ai corrigé en utilisant la méthode trouvée dans mon commentaire. De plus, l'opérande de gauche a été déplacé à la première expression pour éviter la récursion à gauche. – jameszhao00