Beispiel #1
0
# Token 0 -> Hola
# Token 1 -> ,
# Token 2-> Mundo
# Token 3 -> !

# ahora cambia el parseador, aceptando saludos con mas que una sola palabra antes que ','
saludo = Group(OneOrMore(Word(alphas))) + ',' + Word(alphas) + oneOf('! . ?')
tokens = saludo.parseString("Hasta mañana, Mundo !")

for i, token in enumerate(tokens):
    print("Token %d -> %s" % (i, token))

# Ahora parseamos algunas cadenas, usando el metodo runTests
saludo.runTests("""\
    Hola, Mundo!
    Hasta mañana, Mundo !
""",
                fullDump=False)

# 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...
Beispiel #2
0
# in order to use the int, we need to parse it manually...
print(2 * int(res[2]))

# option 2 (using named parser parts)
nam = Word(alphas)
integer = Word(nums)

assgnmt_v2 = nam("varname") + "=" + integer("value")
res = assgnmt_v2.parseString(assgnmt_str)
print(assgnmt_str, "->", res, repr(res))
print(res["varname"], res["value"])

# option 3
from pyparsing import pyparsing_common as cm

# there is a predefined f(loating?)number available...
assgnmt_v3 = Word(alphas) + "=" + cm.fnumber()

assgnmt_str2 = "a = 34.67"
res = assgnmt_v3.parseString(assgnmt_str)
print(res, 2 * res[2])
res = assgnmt_v3.parseString(assgnmt_str2)
print(res, 2 * res[2])

# run several parsing problems as test at once
assgnmt_v3.runTests("""\
   a = 1.2
   b = -4
   a = 1.2e4
   a = 0.001""")