Programación General > C/C++
expresiones c++
(1/1)
l-e-s-t-a-t:
El problema es el siguiente:
Hacer un programa que dada una expresión matemática analice su sintaxis
indicando si esta es correcta en C++.
A = B + C * (D + E) – 10
Por ejemplo si ingresara:
(a + b
debería arrojar un error, ya que falta el ).
Creo que eso es ver si una expresión está bueno o no.
PD: no coloco algún código o algo para empezar porque eso de las expresiones regulares nunca me lo enseñaron en la U y ni siquiera tengo la base, espero puedan ayudarme o orientarme........desde ya cualquiera sea su desición muchas gracias.
Epa:
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
l-e-s-t-a-t:
--- Cita de: "Epa" ---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
--- Fin de la cita ---
Muchas gracias por la ayuda, vere que onda, saludos ^_^
Navegación
Ir a la versión completa