@@ -27,8 +27,6 @@ import Lexer
2727 ' *' { TokenMultiply pos }
2828 ' /' { TokenDivide pos }
2929
30- ' <|' { TokenApply pos }
31-
3230 ' ->' { TokenArrow pos }
3331
3432 ' :=' { TokenAssign pos }
@@ -44,38 +42,42 @@ import Lexer
4442%left ' ++'
4543%left ' +' ' -'
4644%left ' *' ' /'
47- %left ' <|'
4845
4946%%
5047
5148Expr :: { Coma }
52- Expr : Expr ' =' Expr1 { Equal $1 $3 }
53- | Expr ' !=' Expr1 { NotEqual $1 $3 }
54- | Expr ' <' Expr1 { Less $1 $3 }
55- | Expr ' <=' Expr1 { LessEqual $1 $3 }
56- | Expr ' >' Expr1 { Greater $1 $3 }
57- | Expr ' >=' Expr1 { GreaterEqual $1 $3 }
58- | Expr ' ++' Expr1 { Append $1 $3 }
59- | Expr ' +' Expr1 { Add $1 $3 }
60- | Expr ' -' Expr1 { Subtract $1 $3 }
61- | Expr ' *' Expr1 { Multiply $1 $3 }
62- | Expr ' /' Expr1 { Divide $1 $3 }
63- | Expr1 { $1 }
49+ Expr : Expr ' =' Expr1 { Equal $1 $3 }
50+ | Expr ' !=' Expr1 { NotEqual $1 $3 }
51+ | Expr ' <' Expr1 { Less $1 $3 }
52+ | Expr ' <=' Expr1 { LessEqual $1 $3 }
53+ | Expr ' >' Expr1 { Greater $1 $3 }
54+ | Expr ' >=' Expr1 { GreaterEqual $1 $3 }
55+ | Expr ' ++' Expr1 { Append $1 $3 }
56+ | Expr ' +' Expr1 { Add $1 $3 }
57+ | Expr ' -' Expr1 { Subtract $1 $3 }
58+ | Expr ' *' Expr1 { Multiply $1 $3 }
59+ | Expr ' /' Expr1 { Divide $1 $3 }
60+ | Expr1 { $1 }
6461
6562Expr1 :: { Coma }
66- Expr1 : Expr1 Literal { Call $1 $2 }
67- | Literal { $1 }
63+ Expr1 : Expr1 Literal { Call $1 $2 }
64+ | Literal { $1 }
6865
6966Literal :: { Coma }
70- Literal : integer { IntAtom $1 }
71- | string { StrAtom $1 }
72- | ident { Ident $1 }
73- | ' (' Expr ' )' { $2 }
74- | ' [' List ' ]' { List $2 }
67+ Literal : integer { IntAtom $1 }
68+ | string { StrAtom $1 }
69+ | ident { Ident $1 }
70+ | ' (' Expr ' )' { $2 }
71+ | ' [' List ' ]' { List $2 }
72+ | ' (' Params ' ->' Expr ' )' { Lambda (reverse $2 ) $4 }
7573
7674List :: { [Coma] }
77- List : {- empty -} { [] }
78- | Literal List { $1 : $2 }
75+ List : {- empty -} { [] }
76+ | Literal List { $1 : $2 }
77+
78+ Params :: { [String] }
79+ Params : ident { [$1 ] }
80+ | Params ' ->' ident { $3 : $1 }
7981
8082{
8183parseError :: [Token] -> a
@@ -89,6 +91,7 @@ data Coma
8991 | StrAtom String
9092 | Ident String
9193 | List [Coma]
94+ | Lambda [String] Coma
9295 | Equal Coma Coma
9396 | NotEqual Coma Coma
9497 | Less Coma Coma
0 commit comments