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

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s