viernes, 17 de febrero de 2017

1.2 Evaluación de Expresiones


La computadora evalúa las expresiones de a un operador a la vez. Si en una expresión hay dos multiplicaciones y una suma (por ejemplo 4*5 + 2*3) no puede realizar las dos multiplicaciones a la vez, por más que los resultados sean independientes entre si y necesita seguir un orden.


Para evaluar expresiones con varios elementos se suele utilizar una estructura tipo pila, en la que se colocan los números y las operaciones se realizan sobre los últimos números que se ubicaron, reemplazando a estos por el resultado obtenido de la operación. Por ejemplo, para realizar 4+5+1, podemos ir agregando los números en orden a la pila (Tabla 3).


Posteriormente y con los elementos en la pila realizamos las dos operaciones de suma, como se puede observar en la Tabla 4:


Cada operación se realizó sobre los dos números superiores de la pila y reemplazó esos dos elementos por el resultado de la operación. Se hizo decrecer la pila por medio de las operaciones hasta llegar a un solo valor, que es el resultado de toda la expresión.
Una forma de escribir esta serie de operaciones sobre una pila, es con la notación Polaca Inversa, que es la notación que usan algunas calculadoras científicas, sobre todo las de la marca Hewlett – Packard. En ese sentido, la expresión anterior en notación polaca inversa es:

4 5 1 + +

Cada número que aparece se ingresa en la pila y las operaciones trabajan sobre los dos números superiores de la pila. Esta notación es práctica para indicar operaciones que queremos realizar en un orden determinado. Por ejemplo (B+1) * A *(C+2), se escribe en esta notación:

B 1 + A * C 2 + *

Es una forma más directa, pero expresa exactamente lo mismo que la expresión matemática con paréntesis. De esta manera, por medio de una pila la computadora realiza las operaciones, pero por supuesto, las expresiones no se escriben así en Basic, sino que usan la notación común. Es necesario llevar las expresiones a esta forma y es el trabajo del compilador hacerlo.

Por lo tanto, la evaluación de una expresión consiste en obtener el resultado de la misma mediante la aplicación sucesiva de los operadores que la forman. Para ello, se debe utilizar el orden de prioridad de la sección anterior y la semántica de cada operador implicado.

Para mostrar un ejemplo más de evaluación consideremos la siguiente expresión en Pascal:


Donde X, Y y Z son variables de tipo integer cuyos valores antes de efectuar la evaluación son respectivamente 5, -2 y 10. El lector puede comprobar que la expresión anterior esta bien formulada, es decir, cada operador actúa sobre operandos de tipos compatibles con el mismo.

El proceso de evaluación de una expresión como la anterior se realizará según el siguiente algoritmo:

1   1.   Aplicar secuencialmente y según el orden de prioridad definido en la sección anterior los operadores que aparezcan en la expresión. Cada uno de estos operadores se ejecutará como sigue:
2.      
     2.  Aplicar las indirecciones sobre todas las variables que aparezcan en la subexpresión que afecta al operador. En otras palabras, reemplazar cada variable por su valor actual. A modo de ejemplo considere la siguiente expresión:


1.    3.   Realizar todas las llamadas de función implicadas y reemplazar dichas llamadas por los valores devueltos. En el caso de que existan llamadas anidadas, como por ejemplo sqr(ord(´A´)), se realizaran primero las llamadas más interiores.


La siguiente secuencia de ejecución muestra la evaluación paso a paso de la expresión anterior. Obsérvese el orden y forma en que se ejecutan los operadores de dicha expresión. 


En este ejemplo, se ha subrayado la subexpresión que está siendo evaluada después de haber realizado los paso1 y 2 para cada operador. Cada subexpresión es entonces sustituida por su valor en el siguiente paso. Es importante resaltar el hecho de que no se ha especificado el orden en que se aplican los pasos 1 y 2 a los operandos. Este orden depende del compilador y por tanto las expresiones se deben escribir sin suponer ningún orden correcto.



Marcos Leguizamón. (2012). Lenguajes Basic en las Home Computers. REVISTA DE TECNOLOGÍA E INFORMÁTICA HISTÓRICA, Volumen 2 , p. 56-75.











No hay comentarios:

Publicar un comentario