On Apr 6, 7:02 pm, James Stroud <nospamjstroudmap...@mbi.ucla.edu> wrote: > Hello All, > > I want to use an s-expression based configuration file format for a > python program I'm writing. Does anyone have a favorite parser? >
The pyparsing wiki includes this parser on its Examples page: http://pyparsing.wikispaces.com/file/view/sexpParser.py. This parser is also described in more detail in the pyparsing e-book from O'Reilly. This parser is based on the BNF defined here:http:// people.csail.mit.edu/rivest/Sexp.txt. I should think Ron Rivest would be the final authority on S-expression syntax, but this BNF omits '!', '<', and '>' as valid punctuation characters, and does not support free-standing floats and ints as tokens. Still, you can extend the pyparsing parser (such is the goal of pyparsing, to make these kinds of extensions easy, as the source material or BNF or requirements change out from underneath you) by inserting these changes: real = Regex(r"[+-]?\d+\.\d*([eE][+-]?\d+)?").setParseAction(lambda tokens: float(tokens[0])) token = Word(alphanums + "-./_:*+=!<>") simpleString = real | decimal | raw | token | base64_ | hexadecimal | qString And voila! Your test string parses as: [['and', ['or', ['>', 'uid', 1000], ['!=', 'gid', 20]], ['>', 'quota', 5000.0]]] -- Paul -- http://mail.python.org/mailman/listinfo/python-list