holaMundo.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. # -*- coding: utf-8 -*-
  2. # escrito por Marco Alfonso, 2004 Noviembre
  3. # importamos los símbolos requeridos desde el módulo
  4. from pyparsing import Word, alphas, oneOf, nums, Group, OneOrMore, pyparsing_unicode as ppu
  5. # usamos las letras en latin1, que incluye las como 'ñ', 'á', 'é', etc.
  6. alphas = ppu.Latin1.alphas
  7. # Aqui decimos que la gramatica "saludo" DEBE contener
  8. # una palabra compuesta de caracteres alfanumericos
  9. # (Word(alphas)) mas una ',' mas otra palabra alfanumerica,
  10. # mas '!' y esos seian nuestros tokens
  11. saludo = Word(alphas) + ',' + Word(alphas) + oneOf('! . ?')
  12. tokens = saludo.parseString("Hola, Mundo !")
  13. # Ahora parseamos una cadena, "Hola, Mundo!",
  14. # el metodo parseString, nos devuelve una lista con los tokens
  15. # encontrados, en caso de no haber errores...
  16. for i, token in enumerate(tokens):
  17. print ("Token %d -> %s" % (i,token))
  18. #imprimimos cada uno de los tokens Y listooo!!, he aquí a salida
  19. # Token 0 -> Hola
  20. # Token 1 -> ,
  21. # Token 2-> Mundo
  22. # Token 3 -> !
  23. # ahora cambia el parseador, aceptando saludos con mas que una sola palabra antes que ','
  24. saludo = Group(OneOrMore(Word(alphas))) + ',' + Word(alphas) + oneOf('! . ?')
  25. tokens = saludo.parseString("Hasta mañana, Mundo !")
  26. for i, token in enumerate(tokens):
  27. print ("Token %d -> %s" % (i,token))
  28. # Ahora parseamos algunas cadenas, usando el metodo runTests
  29. saludo.runTests("""\
  30. Hola, Mundo!
  31. Hasta mañana, Mundo !
  32. """, fullDump=False)
  33. # Por supuesto, se pueden "reutilizar" gramáticas, por ejemplo:
  34. numimag = Word(nums) + 'i'
  35. numreal = Word(nums)
  36. numcomplex = numreal + '+' + numimag
  37. print (numcomplex.parseString("3+5i"))
  38. # Cambiar a complejo numero durante parsear:
  39. numcomplex.setParseAction(lambda t: complex(''.join(t).replace('i','j')))
  40. print (numcomplex.parseString("3+5i"))
  41. # Excelente!!, bueno, los dejo, me voy a seguir tirando código...