blob: 5d1dad824955b64928cccae3c673ba87c0d850ce (
plain)
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
|
%source {
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
}
%common {
#include "ast.h"
#include "run.h"
}
%value "AstNode"
expr <-
l:list { $$ = l; }
/ n:number { $$ = n; }
/ s:symbol { $$ = s; }
list <- { $$ = astnode_new_list(); }
'('
( e:expr { astnode_append(&$$, e); }
)*
')' _
number <- < [0-9]+ > (! ident_char) _ { $$ = astnode_new_num(atoi($1)); }
symbol <- < ident_char+ > _ { $$ = astnode_new_symbol(strdup($1)); }
ident_char <- [-_a-zA-Z'+*0-9]
_ <- [ \t]*
|