W jaki sposób w ANTLR zaimplementowano pierwszeństwo operatora?Pierwszeństwo operatora ANTLR
Używam w tej chwili pakietu XText/Antlr.
Edit:
Zrobiłem co sepp2k zasugerował, a pierwszeństwo operator działa teraz, ale rzeczy jak 3 + * również działać teraz. Operatorzy zasadniczo "wpadają" na drzewo.
Próbowałem także gramatyki C na stronie internetowej ANTLR i to samo stało się w ANTLRworks.
Ktoś wie, na czym polega problem?
BinaryExpression:
'or'? AndOp; //or op
AndOp:
'and'? ComparisonOp;
ComparisonOp:
('>'|'<'|'>='|'<='|'=='|'~=')? ConcatOp;
ConcatOp:
'..'? AddSubOp;
AddSubOp:
('+' | '-')? MultDivOp;
MultDivOp:
('*' | '/')? ExpOp;
ExpOp:
'^'? expr=Expression;
Wywołanie do wyrażenia powinno prawdopodobnie znajdować się pomiędzy "(" i ")". Wygląda na to, że wszyscy operatorzy tracą lewy operand. – sepp2k
Naprawiłem to za pomocą metody znalezionej w moim komentarzu. Również lewy operand został przeniesiony do pierwszego wyrażenia, aby zapobiec rekursji lewej. – jameszhao00