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?