/usr/share/doc/python-simpleparse-doc/examples/lisp.py is in python-simpleparse-doc 2.1.0a1-7.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | """Basic LISP parser
We use library items, so we get " strings, float, int, and hex
atoms, as well as lists. Note: Lisp doesn't seem to
use "," for seperating atoms in lists? I don't really
remember it well enough to recall, but seems to match the
samples I see.
Note: Original grammar was from a sample in the YAPPS
documentation. Though it's kinda hard to recognise here.
"""
definition = r"""
### A simple LISP parser
<ts> := [ \t\n\r]*
<nameChar> := [-+*/!@%^&=.a-zA-Z0-9_]
quote := "'"
name := nameChar+
>atom< := quote / string_double_quote / list / number_expr / name
# numbers are regular number values followed
# by something that is _not_ a nameCharacter
number_expr := number, ?-(nameChar)
list := "(", seq?, ")"!
>seq< := ts, atom, (ts,atom)*, ts
"""
from simpleparse.parser import Parser
from simpleparse.common import strings, numbers
from simpleparse.dispatchprocessor import *
parser = Parser( definition, 'atom' )
if __name__ == "__main__":
from simpleparse.stt.TextTools import print_tags
shouldParse = [
"(+ 2 3)",
"(- 2 3)",
"(* 2 3)",
"(quote (2 3 4))",
"(23s (2.4s 3s 45.3))",
"(() () (2 3 4))",
"()",
'''("thisand that" ())''',
'"this"',
'''('"this")''',
'''("this\n\r" ' those (+ a b) (23s 0xa3 55.3) "s")''',
r'''("this\n\r" ' those (+ a b) (23s 0xa3 55.3) "s")''',
r'''("this\n\r" ' those (+ a b) (23s 0xa3 55.3] "s")''',
'''("this\n\r" ' those (+ a b) (23s 0xa3 55.3\n\n] "s")''',
'''(with-pedantry :high It's "Scheme In One Defun".)''',
]
import pprint
for item in shouldParse:
try:
success, children, next = parser.parse( item )
if not success:
print 'fail', item
else:
print 'success', item, next
pprint.pprint( children )
except SyntaxError, err:
print err
|