Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %{
- open Ast
- %}
- %token <int> INT
- %token <bool> BOOL
- %token <float> FLOAT
- %token <string> VAR
- %token <string> OPER
- %token LET EQ IN
- %token IF THEN ELSE
- %token LPAREN RPAREN
- %token LBRACKET RBRACKET
- %token PIPE
- %token SEMI COMMA
- %token EOF
- %start <Ast.ast list> main
- %%
- main:
- | expr; SEMI; SEMI; main { $1 :: $4 }
- | expr; EOF { [$1] }
- | EOF { [] }
- ;
- expr:
- | INT
- { Int $1 }
- | FLOAT
- { Float $1 }
- | BOOL
- { Bool $1 }
- | call
- { $1 }
- | v = VAR
- { Var v }
- | LPAREN; expr; RPAREN
- { $2 }
- | LBRACKET; l = list_fields; RBRACKET
- { List l }
- | LPAREN; t = tuple_fields; RPAREN
- { Tuple t }
- | IF; c = expr; THEN; t = expr; ELSE; e = expr
- { If (c, t, e) }
- | LET; b = bindings; IN; e = expr
- { Let (b, e) }
- ;
- call:
- | call; expr { Call ($1, $2) }
- | expr; expr { Call ($1, $2) }
- ;
- list_fields:
- l = separated_list (SEMI, expr) { l }
- ;
- tuple_fields:
- t = separated_list (COMMA, expr) { t }
- ;
- bindings:
- b = separated_list (PIPE, binding) { b }
- ;
- binding:
- v = VAR; EQ; e = expr { (v, e) }
- ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement