Expresiones aritméticas

 

            La formación de expresiones aritméticas viene regida por los siguientes diagramas sintácticos:

 

 

 

 

            Como se observará en estos diagramas (también llamados diagramas de Conway) son grafos dirigidos que tienen dos componentes esenciales:

En estos diagramas se acostumbrará a comenzar el recorrido por la izquierda, por la rama que suele llevar muy cercano el nombre del elemento que vamos a definir, se sigue el recorrido, en el sentido de las flechas, y cada elemento (rectángulo o círculo) que se va encontrando se concatena a lo que ya se tuviera.

Quedan por definir Identf.,  Constante y Función, que por la brevedad de su definición utilizaré lenguaje natural para ello:

·        Identif. : los identificadores se utilizarán para designar las variables que aparezcan en la expresión aritmética. Un identificador se formará empezando siempre por una letra seguido de 0 o más letras o dígitos numéricos.

·        Constante : una constante es, simplemente,  un número real (notación IEEE 754-1985) compuesto por una parte entera, una parte decimal y una parte exponencial (no deben aparecer todas necesariamente). Igual que en el lenguaje Java.

·        Función : se refiere a funciones matemáticas de un único parámetro. Las incluidas en este caso son:

o       Sqrt : calcula la raíz cuadrada de un número (positivo).

o       Exp : eleva el número e a un número.

o       Log : calcula el logaritmo neperiano de un número.

 

Ejemplo de validación de una expresión aritmética

8 + (a3 * 5)

 

Término -> Factor -> Constante (8) -> (+) -> Término -> Factor -> (() -> Expresión -> ()) -> Fin

 

Hasta aquí, tenemos reconocido, según los diagramas sintácticos, lo siguiente :             8 + ( Expresión )

Aquí, Expresión se encargará de validar a3 *  5, con la siguiente secuencia:

 

Término -> Factor -> Identif. (a3) -> (*) -> Factor -> Constante (5)

 

Ejemplos, igualmente válidos, que se pueden verificar con los diagramas sintácticos, serían:

 

1.     2 + 3^(-3) * sqrt(79 / exp(1*a)) * (-5)

2.     ( -( -( -( -( -8)))))