Para evaluar una expresión en formato postfijo usaremos el analizador sintactico de la sección anterior y el algoritmo de la sección previa a esa. Para no complicar las cosas, comenzaremos con un evaluador que solo implementa los operadores
+ y *:
1: def evalPostfijo(expr):
2: import re
3: listaTokens = re.split("([^0-9])", expr)
4: pila = Pila()
5: for token in listaTokens:
6: if token == '' or token == ' ':
7: continue
8: if token == '+':
9: suma = pila.pop() + pila.pop()
10: pila.push(suma)
11: elif token == '*':
12: producto = pila.pop() * pila.pop()
13: pila.push(producto)
14: else:
15: pila.push(int(token))
16: return pila.pop()
La primera condición se encarga de espacios y cadenas vacías. Las dos condiciones siguientes controlan los operadores. Asumimos, por ahora, que todo lo demás es un operando. Por supuesto, sería mejor verificar si la entrada tiene errores y mostrar un mensaje con el error, pero eso se hará después.
Comprobemos con una evaluación de la forma postfijo (56+47)*2):
1: >>> print evalPostfijo ("56 47 + 2 *")
2: 206
Esto es suficiente.
Comentarios
Publicar un comentario