18.7. Evaluar un postfijo

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.
0