Buenas.
Si queres hacerlo bien, tendrias que aberiguar un poco de analizadores lexicos y sintacticos.
Una forma mas sencilla es la siguiente:
Creamos categorias para los distintos operandos y operadores
Por ejemplo
C = constantes
V = variables
O = +, -, * y /
P = (
Q = )
y hace falta un contador (cont) para lo parentesis, cada vez que aparece un ( aumentamos en 1, y cada vez que aparece ) restamos 1
despues hay que crear reglas de la forma
C -> O o Q (de una constante podemos ir a un operador o cerrar parentesis)
V -> O o Q (de una variable podemos ir a un operador o cerrar parentesis)
O -> V o C o P (de un operador podemos ir a una variable, una constante o abrir parentesis)
P -> V o C o P
Q -> O o Q
despues hay que trensformar la expresion en los tokens
por ejemplo
B + C * (D + E) – 10
VOVOPVOVQOC
y despues hay que evaluar la cadena, si de una determinada posicion no se puede llegar a la siguiente a partir de alguna de las reglas o si al final el contador de parentesis es distinto de coro, entonces la expresion no es valida, en otro caso la expresion es valida.
Espero que te sea util
Saludos