Nulla di magico, devi scrivere un parser di espressioni matematiche; normalmente i parser a discesa ricorsiva sono i più semplici da implementare, trovi un sacco di documentazione in proposito su Internet.

Qui un po' di giocattoli che avevo scritto in C++; il più semplice è l'EvaluatingParser, che valuta l'espressione mentre la parsa; poi ho scritto un ASTParser, che parsa un'espressione trasformandola in un albero sintattico (eventualmente valutabile con l'ASTEvaluatore), e un ASTCompiler che compila l'AST in un bytecode eseguito da una piccola macchina virtuale ad-hoc, che consente di valutare ripetutamente l'espressione (al variare delle variabili) in maniera molto più efficiente piuttosto che ri-parsandola tutte le volte.