PROG ::= FUNCALL* EXPR ::= LITERAL | FUNCALL | VARDECL | FUNDECL | LAMBDA LAMBDA ::= opar rarrow opar PARAMS cpar BODY cpar PARAMS ::= ident* BODY ::= expr* VARDECL ::= opar decl ident EXPR cpar FUNDECL ::= opar decl opar ident PARAMS cpar EXPR cpar FUNCALL ::= opar ident EXPR* cpar LITERAL ::= bool | int | ident