Come viene implementata la precedenza degli operatori in ANTLR?ANTLR Precedenza operatore
Attualmente sto utilizzando il pacchetto XText/Antlr.
Edit:
ho fatto quello che sepp2k suggerito, e precedenza degli operatori ora funziona, ma roba come 3 + * funziona anche ora. Gli operatori stanno fondamentalmente "cadendo" dall'albero.
Inoltre, ho provato la grammatica C sul sito Web di ANTLR e la stessa cosa è accaduta in ANTLRworks.
Qualcuno sa qual è il problema?
BinaryExpression:
'or'? AndOp; //or op
AndOp:
'and'? ComparisonOp;
ComparisonOp:
('>'|'<'|'>='|'<='|'=='|'~=')? ConcatOp;
ConcatOp:
'..'? AddSubOp;
AddSubOp:
('+' | '-')? MultDivOp;
MultDivOp:
('*' | '/')? ExpOp;
ExpOp:
'^'? expr=Expression;
La chiamata a espressione dovrebbe essere probabilmente tra '(' e ')'. Anche ai tuoi operatori sembra manchi un operando di sinistra. – sepp2k
L'ho risolto usando il metodo trovato nel mio commento. Inoltre, l'operando di sinistra è stato spostato nella prima espressione per impedire la ricorsione a sinistra. – jameszhao00