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:
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;
}
}
Noi abbiamo utilizzato uno stack, però, mentre l'ordine delle operazioni lo individuiamo correttamente, l'ordine degli operandi associato spesso risulta errato.
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?