36 lines
872 B
CFEngine3
36 lines
872 B
CFEngine3
|
|
Program. Program ::= [Bind] ;
|
|
|
|
Bind. Bind ::= Ident [Ident] "=" Exp ;
|
|
|
|
EAnn. Exp5 ::= "(" Exp ":" Type ")" ;
|
|
EId. Exp4 ::= Ident ;
|
|
EConst. Exp4 ::= Const ;
|
|
EApp. Exp3 ::= Exp3 Exp4 ;
|
|
EAdd. Exp1 ::= Exp1 "+" Exp2 ;
|
|
ELet. Exp ::= "let" Ident "=" Exp "in" Exp ;
|
|
EAbs. Exp ::= "\\" Ident "." Exp ;
|
|
|
|
CInt. Const ::= Integer ;
|
|
CStr. Const ::= String ;
|
|
|
|
TMono. Type1 ::= "Mono" Ident ;
|
|
TPoly. Type1 ::= "Poly" Ident ;
|
|
TArrow. Type ::= Type1 "->" Type ;
|
|
|
|
-- This doesn't seem to work so we'll have to live with ugly keywords for now
|
|
-- token Upper (upper (letter | digit | '_')*) ;
|
|
-- token Lower (lower (letter | digit | '_')*) ;
|
|
|
|
separator Bind ";" ;
|
|
separator Ident " ";
|
|
|
|
coercions Type 1 ;
|
|
coercions Exp 5 ;
|
|
|
|
comment "--" ;
|
|
comment "{-" "-}" ;
|
|
|
|
-- Adt. Adt ::= "data" UIdent "=" [Constructor] ;
|
|
-- Sum. Constructor ::= UIdent ;
|
|
-- separator Constructor "|" ;
|