yapps/examples/lisp.g
2009-09-09 13:52:11 -07:00

15 lines
641 B
Text

# This parser can parse a simple subset of Lisp's syntax.
parser Lisp:
ignore: r'\s+'
token NUM: r'[0-9]+'
token ID: r'[-+*/!@$%^&=.a-zA-Z0-9_]+'
token STR: r'"([^\\"]+|\\.)*"'
rule expr: ID {{ return ('id',ID) }}
| STR {{ return ('str',eval(STR)) }}
| NUM {{ return ('num',int(NUM)) }}
| r"\("
{{ e = [] }} # initialize the list
( expr {{ e.append(expr) }} ) * # put each expr into the list
r"\)" {{ return e }} # return the list