42 lines
580 B
OCaml
42 lines
580 B
OCaml
/* Declarations */
|
|
|
|
%{
|
|
open Omniflan.Ast
|
|
%}
|
|
|
|
%token Eof
|
|
%token Newline
|
|
%token Let
|
|
|
|
%token False
|
|
%token True
|
|
%token <string> Ident
|
|
%token <int> Int
|
|
%token <float> F32
|
|
|
|
%token Equal
|
|
%token LParen
|
|
%token RParen
|
|
|
|
%start <Omniflan.Ast.program> prog
|
|
|
|
%%
|
|
/* Grammar */
|
|
|
|
expr:
|
|
| i = Int; { Int i }
|
|
|
|
stmt:
|
|
| Let; var_name = Ident; Equal; bound_expr = expr
|
|
{ Let {
|
|
loc = $startpos;
|
|
var_name = var_name;
|
|
bindee = bound_expr
|
|
}
|
|
}
|
|
|
|
toplevel_item:
|
|
| stmt = stmt { Stmt stmt }
|
|
|
|
prog:
|
|
| prog = separated_list(Newline, toplevel_item); Eof { prog } |