blob: 408439c03812e8c1db8669af999bb8aaf3f20a5e (
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
|
grammar ANF;
aexp
: IDENT #var
| NUMBER #num
| '(' aexp '+' aexp ')' #add
| '(' aexp '-' aexp ')' #sub
| '(' aexp '*' aexp ')' #mul
| '(' aexp '/' aexp ')' #div
| '(' IDENT ':' cexp ')' #lam
;
funcall
: IDENT '(' aexp (',' aexp)* ')' #call
| aexp #atom
;
cexp
: 'let' IDENT '=' funcall 'in' cexp #let
| funcall #fc
;
IDENT: Letter (Letter | Digit)*;
NUMBER: Digit+;
fragment Letter: 'A' .. 'Z' | 'a' .. 'z';
fragment Digit: '0'..'9';
WS: [ \t\n\r]+ -> skip;
|