From 27e183a78c8062ed7c2bbb91655a5e56cd697bba Mon Sep 17 00:00:00 2001 From: Cengiz Kaygusuz Date: Mon, 20 Nov 2017 20:46:39 -0500 Subject: Move src to root --- examples/parsePythonValue.py | 70 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 examples/parsePythonValue.py (limited to 'examples/parsePythonValue.py') diff --git a/examples/parsePythonValue.py b/examples/parsePythonValue.py new file mode 100644 index 0000000..53c61fc --- /dev/null +++ b/examples/parsePythonValue.py @@ -0,0 +1,70 @@ +# parsePythonValue.py +# +# Copyright, 2006, by Paul McGuire +# +from __future__ import print_function +from pyparsing import * + + +cvtBool = lambda t:t[0]=='True' +cvtInt = lambda toks: int(toks[0]) +cvtReal = lambda toks: float(toks[0]) +cvtTuple = lambda toks : tuple(toks.asList()) +cvtDict = lambda toks: dict(toks.asList()) +cvtList = lambda toks: [toks.asList()] + +# define punctuation as suppressed literals +lparen,rparen,lbrack,rbrack,lbrace,rbrace,colon = \ + map(Suppress,"()[]{}:") + +integer = Regex(r"[+-]?\d+")\ + .setName("integer")\ + .setParseAction( cvtInt ) +real = Regex(r"[+-]?\d+\.\d*([Ee][+-]?\d+)?")\ + .setName("real")\ + .setParseAction( cvtReal ) +tupleStr = Forward() +listStr = Forward() +dictStr = Forward() + +unicodeString.setParseAction(lambda t:t[0][2:-1].decode('unicode-escape')) +quotedString.setParseAction(lambda t:t[0][1:-1].decode('string-escape')) +boolLiteral = oneOf("True False").setParseAction(cvtBool) +noneLiteral = Literal("None").setParseAction(replaceWith(None)) + +listItem = real|integer|quotedString|unicodeString|boolLiteral|noneLiteral| \ + Group(listStr) | tupleStr | dictStr + +tupleStr << ( Suppress("(") + Optional(delimitedList(listItem)) + + Optional(Suppress(",")) + Suppress(")") ) +tupleStr.setParseAction( cvtTuple ) + +listStr << (lbrack + Optional(delimitedList(listItem) + + Optional(Suppress(","))) + rbrack) +listStr.setParseAction(cvtList, lambda t: t[0]) + +dictEntry = Group( listItem + colon + listItem ) +dictStr << (lbrace + Optional(delimitedList(dictEntry) + \ + Optional(Suppress(","))) + rbrace) +dictStr.setParseAction( cvtDict ) + +tests = """['a', 100, ('A', [101,102]), 3.14, [ +2.718, 'xyzzy', -1.414] ] + [{0: [2], 1: []}, {0: [], 1: [], 2: []}, {0: [1, 2]}] + { 'A':1, 'B':2, 'C': {'a': 1.2, 'b': 3.4} } + 3.14159 + 42 + 6.02E23 + 6.02e+023 + 1.0e-7 + 'a quoted string'""".split("\n") + +for test in tests: + print("Test:", test.strip()) + result = listItem.parseString(test)[0] + print("Result:", result) + try: + for dd in result: + if isinstance(dd,dict): print(list(dd.items())) + except TypeError as te: + pass + print() -- cgit v1.2.1