/* Declarations */ %{ open Omniflan.Ast %} %token Eof %token Newline %token Let %token False %token True %token Ident %token Int %token F32 %token Equal %token LParen %token RParen %start 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 }