Devo programmare in java un riconoscitore di una grammatica che permette di generare espressioni matematiche.
L'idea di base è quella di dividere le espressioni in OpExp, una OpExp è composta da un operatore e ciò che sta alla sua destra e alla sua sinistra secondo il codice qui sotto:
Noi abbiamo utilizzato uno stack, però, mentre l'ordine delle operazioni lo individuiamo correttamente, l'ordine degli operandi associato spesso risulta errato.codice:public class OpExp extends Exp implements IComposedExp { private String operator; private IExp l_IExp; private IExp r_IExp; public OpExp(String op, IExp left, IExp right){ operator = op; l_IExp = left; r_IExp = right; } public void finalize() throws Throwable { super.finalize(); } public IExp getLeft(){ return l_IExp; } public String getOpName(){ return operator; } public IExp getRight(){ return r_IExp; } }
Ad esempio l'espressione (3+2)+2*(5+6) viene valutata erronemente poiché al momento di calcolare il prodotto del "*" in cima allo stack si trova il risultato di (3+2) e non il 2...
Se serve posso anche postare il codice del parser.
Qualche suggerimento?

Rispondi quotando