flan/lib/oflan.mly
2024-07-09 21:01:55 +10:00

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 }