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 re3: 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: 206Esto es suficiente.
Comentarios
Publicar un comentario