4.5.- Priorirdad de operadores, evaluación de expresiones.
A continuación se muestra una pequeña tabla donde se ilustra el orden de prioridad:
OPERADOR | | PRIORIDAD |
^ | | Alta |
*, /, Div | | |
+, -, Mod | | |
Relaciones | | Baja |
Nota: sobre todos estos operadores, se encuentran los paréntesis en la maxima prioridad, sin embargo por no considerarse un operador no se incluye en la tabla de prioridades.
En caso de coincidir varios operadores deigual prioridad en una expresión o subexpresión encerrada entre paréntesis, el orden de prioridad en este caso es de izquiera a derecha.
Cuando se realiza una operación con baja prioridad por adelantado, debe agruparse a los operativos involucrados.
ejemplos:
4 + 12 / 2 = 10 (sin agrupar)
(4 + 12) / 2 = 8 (con agrupador)
*Evaluación de expresiones
las expresiones se clasifican en tres grupos:
- expresión fija
- expresión postfija
- expresión prefija
Expresión postfija:
- Utilizada para que los compiladores puedan traducir expresiones.
- Si e es una expresión con operadores y operandos, la forma habitual de escritura se conoce como “infix” porque los operadores van entre (in) los operandos ( los operadores unarios preceden sus operandos).
- La forma “postfix” consiste en colocar cada operador inmediatamente después de los operandos
Ventajas:
- No son necesarios los paréntesis
- La prioridad de los operadores no es relevante
- La expresión se puede evaluar realizando un recorrido de izquierda a derecha, apilando los operandos y evaluando los operadores utilizando los operandos adecuados extraídos de la pila y apilando el resultado intermedio para repetir el proceso.
- Este método es más simple que los necesarios cuando se trabaja con la notación “infija”
Conversión postfija - infija
1.- Colocar todos los paréntesis de la expresión
2.- Reemplazar los paréntesis derechos con los operadores correspondientes
3.- Eliminar todos los paréntesis
Ejemplo:
A / B - C + D * E - A * C
1.- ( ( ( ( A / B ) - C ) + ( D * E ) ) - (A * C ) )
2.-( ( ( ( AB/C- (DE*+(AC*-
3.- AB/C- DE*+AC*-
Conversión infija - postfija
1.- Pasamos todos los operandos a la salida
2.- Almacenamos los operadores en una pila hasta que se tengan que pasar a la salida
Ejemplos
A + B * C => ABC*+
Siguiente token pila salida
------- vacía ---------
A vacía A
+ + A
B + AB
El algoritmo debe determinar si * ingresa a la pila o si se retira el +.
Como la prioridad de * es mayor se debe almacenar
* +* AB
C +* ABC
La expresión ha finalizado. Se retiran los operadores de la pila: ABC*+
0 Comments:
Post a Comment
<< Home