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