Non è strettamente necessario costruire un AST, puoi anche semplicemente valutare l'espressione "mentre" effettui il parsing; ad esempio, puoi dare un'occhiata a questo, il codice è relativamente semplice da capire (anche se alcune scelte di interfaccia sono discutibili, vedi questa discussione, in cui tra l'altro trovi anche il codice completo di un altro parser di espressioni).

Se invece vuoi una libreria più potente, puoi dare un'occhiata qui (effettua il parsing e traduce in bytecode con qualche ottimizzazione, così che ri-valutare la stessa espressione con parametri differenti sia estremamente efficiente).