Quello che chiedi non è una cosa semplice.
Io ho visto due tecniche:

1) compilazione al volo
2) uso delle espressioni regolari

davvero molto interessanti, ma anche abbastanza difficili da implementare


però ricordo una vecchia tecnica che faceva leva sulla capacità dell'sql di interpretare espressioni.
Basta costruire un qualunque database, per esempio Access.
Si costruisce una sola tabella chiamata per esempio Eval, con un solo campo di qualunque tipo, per esempio, ID di tipo numerico, con un solo record.

Dopo di che basta richiamare l'sql
codice:
    '------------------------------------------------------------
    'valuta una espressione matematica contenuta in una stringa
    '------------------------------------------------------------
    Public Function EvalSql(ByVal Espressione As String) As Double
        Try
            Return CDbl(msole.RisultatoAggregazioneSQL(gl.StringaConnessione, String.Format("SELECT ({0}) AS ESPRESSIONE FROM eval GROUP BY ({0})", Espressione)))
        Catch ex As Exception
            Throw
        End Try
    End Function
che si richiama per esempio con
Dim s As String = Me.TextBox1.Text
Me.Label1.Text = String.Format("{0} = {1} SQL", n, Me.EvalSql(s))

la funzione RisultatoAggregazioneSQL non fa altro che usare Comando.ExecuteScalar()

prova a valutare "sin(sqr(1/2 * 100 - 7)-6)^2" che dà 0,279856060113118