aboutsummaryrefslogtreecommitdiff
path: root/examples/lisp.g
blob: 551e6f98d464e26a1e738ba4afc23e97553cd914 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
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