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