diff --git a/Grammar.cf b/Grammar.cf index b70a9a4..52c2353 100644 --- a/Grammar.cf +++ b/Grammar.cf @@ -1,12 +1,21 @@ Program. Program ::= [Bind]; -EId. Exp3 ::= Ident; -EInt. Exp3 ::= Integer; -ELet. Exp3 ::= "let" [Bind] "in" Exp; -EApp. Exp2 ::= Exp2 Exp3; -EAdd. Exp1 ::= Exp1 "+" Exp2; -EAbs. Exp ::= "\\" Ident ":" Type "." Exp; -EAnn. Exp3 ::= "(" Exp ":" Type ")"; + +EId. Exp3 ::= Ident; +EInt. Exp3 ::= Integer; +ELet. Exp3 ::= "let" [Bind] "in" Exp; +EApp. Exp2 ::= Exp2 Exp3; +EAdd. Exp1 ::= Exp1 "+" Exp2; +EAbs. Exp ::= "\\" Ident ":" Type "." Exp; +EAnn. Exp3 ::= "(" Exp ":" Type ")"; + +ECase. Exp ::= "case" Exp "of" "{" [CaseMatch] "}"; +-- +CaseMatch. CaseMatch ::= Case "=>" Exp ; +separator CaseMatch ","; +--terminator CaseMatch "."; + +CInt. Case ::= Integer ; Bind. Bind ::= Ident ":" Type ";" Ident [Ident] "=" Exp ; diff --git a/sample-programs/basic-1 b/sample-programs/basic-1 index 3738b1b..5f0d670 100644 --- a/sample-programs/basic-1 +++ b/sample-programs/basic-1 @@ -4,17 +4,17 @@ --main : Int; --main = tripplemagic ((\x:Int. x+x+3) ((\x:Int. x) 2)) 5 3 -apply : (Int -> Int) -> Int -> Int; -apply f x = f x; - -main : Int; -main = (\x : Int . x + 5) 5 - - ---apply : (Int -> Int -> Int) -> Int -> Int; ---apply f x y = f x y; ---krimp: Int -> Int -> Int; ---krimp x y = x + y; +--apply : (Int -> Int) -> Int -> Int; +--apply f x = f x; +-- --main : Int; ---main = apply (krimp) 2 3;--apply (\y: Int . (\x: Int . x + y + 2)) 5 2; +--main = (\x : Int . x + 5) 5 + + +apply : (Int -> Int -> Int) -> Int -> Int -> Int; +apply f x y = f x y; +krimp: Int -> Int -> Int; +krimp x y = x + y; +main : Int; +main = apply (krimp) 2 3;--apply (\y: Int . (\x: Int . x + y + 2)) 5 2;