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

[0] Índice de Mensajes

Ir a la versión completa