usa un albero di espressione! 
l'ho fatto, ho letto l'articolo che hai postato

il problema è questo:
la mia funzione lavora così
scandisce il vettore in ingresso, trova l'operatore meno prioritario e lo esegue, se ad esempio l'operatore è + farà
"tutto quello che sta a sinistra del piu" + "tuttoquello che sta a destra del piu"
e quindi vita ricorsivamente fino a sudividere l'espressione in tante sotto-espressioni formate dal solo operando. quando l'espressione è formata solo dall'operando, ritorna semplicemente tale operando
resta ovviamente da definidre l'operatore "()" che ha il ruolo di modificare la priorità degli altri operatori
mi sono dato una definizione ricorsiva
-se l'espressione contiene parentesi, valuta solo gli operatori al di fuori delle parentesi (ovvero quando il numero di parentesi aperte trovate lungo la scansione eguaglia il numero di prarentesi chiuse)
- se la sottoespressione ricavata è racchiusa tra parentesi, allora parsa il contenuto delle parentesi
nel caso (a+b)+(c+d), ad esempio, si verificano entrambe le condizioni, allora il parser dividerà così l'espressione
A= a+b)
B= (c+d
return A + B
che ovviamente non ha senso