diff options
author | ptmcg <ptmcg@9bf210a0-9d2d-494c-87cf-cfb32e7dff7b> | 2012-10-02 04:55:56 +0000 |
---|---|---|
committer | ptmcg <ptmcg@9bf210a0-9d2d-494c-87cf-cfb32e7dff7b> | 2012-10-02 04:55:56 +0000 |
commit | b8d7d6e994ba837f197f36f23bbad10fe3e24cc8 (patch) | |
tree | 57ea8bcf2e66532a36c833a7bc57cff9d5d0e4dd /src/examples/parsePythonValue.py | |
parent | 0edced5724b253771cc9631184096a98f0432f2a (diff) | |
download | pyparsing-b8d7d6e994ba837f197f36f23bbad10fe3e24cc8.tar.gz |
Add example files to SVN
git-svn-id: svn://svn.code.sf.net/p/pyparsing/code/trunk@238 9bf210a0-9d2d-494c-87cf-cfb32e7dff7b
Diffstat (limited to 'src/examples/parsePythonValue.py')
-rw-r--r-- | src/examples/parsePythonValue.py | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/examples/parsePythonValue.py b/src/examples/parsePythonValue.py new file mode 100644 index 0000000..d9671fa --- /dev/null +++ b/src/examples/parsePythonValue.py @@ -0,0 +1,67 @@ +# parsePythonValue.py
+#
+# Copyright, 2006, by Paul McGuire
+#
+
+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())
+
+# 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)
+
+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 dd.items()
+ except TypeError,te:
+ pass
+ print
|