# -*- coding: UTF-8 -*-

# escrito por Marco Alfonso, 2004 Noviembre

# importamos el modulo 
from pyparsing import * 
saludo= Word(alphas) + ',' + Word(alphas) + '!' 
 
# Aqui decimos que la gramatica "saludo" DEBE contener 
# una palabra compuesta de caracteres alfanumericos 
# (Word(alphas)) mas una ',' mas otra palabra alfanumerica, 
# mas '!' y esos seian nuestros tokens 
tokens = saludo.parseString("Hola, Mundo !") 
 
# Ahora parseamos una cadena, "Hola, Mundo!", 
# el metodo parseString, nos devuelve una lista con los tokens 
# encontrados, en caso de no haber errores... 
for i in range(len(tokens)):
    print ("Token %d -> %s" % (i,tokens[i]))

#imprimimos cada uno de los tokens Y listooo!!, he aquí a salida 
# Token 0 -> Hola
# Token 1 -> ,
# Token 2-> Mundo 
# Token 3 -> ! 
 
# Por supuesto, se pueden "reutilizar" gramáticas, por ejemplo: 
numimag = Word(nums) + 'i' 
numreal = Word(nums) 
numcomplex = numreal + '+' + numimag 
print (numcomplex.parseString("3+5i"))

# Cambiar a complejo numero durante parsear:
numcomplex.setParseAction(lambda t: complex(''.join(t).replace('i','j')))
print (numcomplex.parseString("3+5i"))

# Excelente!!, bueno, los dejo, me voy a seguir tirando código...

