George - Thanks for your enthusiastic endorsement!
Here are some quibbles about your pyparsing grammar (but really, not bad for a first timer): 1. The Word class is used to define "words" or collective groups of characters, by specifying what sets of characters are valid as leading and/or body chars, as in: integer = Word(digitsFrom0to9) firstName = Word(upcaseAlphas, lowcaseAlphas) In your parser, I think you want the Literal class instead, to match the literal string '{'. 2. I don't think there is any chance to confuse a withQuotes with a withoutQuotes, so you can try using the "match first" operator '|', rather than the greedy matching "match longest" operator '^'. 3. Lastly, don't be too quick to use asList() to convert parse results into lists - parse results already have most of the list accessors people would need to access the returned matched tokens. asList() just cleans up the output a bit. Good luck, and thanks for trying pyparsing! -- Paul -- http://mail.python.org/mailman/listinfo/python-list