C.8. Árboles de expresión Python

   1: def tomaToken(listaToken, esperado):
   2:     if listaToken[0] == esperado:
   3:         listaToken[0:1] = [] # quita el token
   4:         return 1
   5:     else:
   6:         return 0
   7: def obtieneProducto(listaToken) :
   8:  
   9: a = obtieneNumero(listaToken)
  10:     if tomaToken(listaToken, '*') :
  11:         b = obtieneProducto(listaToken)
  12:         return Arbol('*', a, b)
  13:     else :
  14:         return a
  15:  
  16: def obtieneSuma(listaToken) :
  17: a = obtieneProducto(listaToken)
  18:     if tomaToken(listaToken, '+') :
  19:         b = obtieneSuma(listaToken)
  20:         return Arbol('+', a, b)
  21:     else :
  22:         return a
  23:  
  24: def obtieneNumero(listaToken):
  25:     
  26:     if tomaToken(listaToken, '(') :
  27:         x = obtieneSuma(listaToken) # obtiene subexpresion
  28:         tomaToken(listaToken, ')') # se come el cierre de parentesis
  29:         return x
  30:     else :
  31:         x = listaToken[0]
  32:  
  33:     if type(x) != type(0) : return None
  34:         listaToken[0:1] = [] # quita el token
  35:         return Arbol(x, None, None) # devuelve una hoja sin el numero
0