aboutsummaryrefslogtreecommitdiff
path: root/Sjit/Syntax.icl
diff options
context:
space:
mode:
Diffstat (limited to 'Sjit/Syntax.icl')
-rw-r--r--Sjit/Syntax.icl16
1 files changed, 15 insertions, 1 deletions
diff --git a/Sjit/Syntax.icl b/Sjit/Syntax.icl
index ae75087..7412d7c 100644
--- a/Sjit/Syntax.icl
+++ b/Sjit/Syntax.icl
@@ -13,6 +13,8 @@ import Text.Parsers.Simple.Core
:: Token
= TIdent !String
| TInt !Int
+ | TTrue
+ | TFalse
| TEq
| TComma
@@ -28,6 +30,8 @@ where
toString t = case t of
TIdent s -> "'" +++ s +++ "'"
TInt n -> toString n
+ TTrue -> "True"
+ TFalse -> "False"
TEq -> "="
TComma -> ","
TParenOpen -> "("
@@ -44,7 +48,11 @@ where
n | isIdent n
# (i,n) = readIdent isIdent [] i e s
- -> lex [TIdent n:tks] i e s
+ # tk = case n of
+ "True" -> TTrue
+ "False" -> TFalse
+ n -> TIdent n
+ -> lex [tk:tks] i e s
n | isFunnyIdent n
# (i,n) = readIdent isFunnyIdent [] i e s
@@ -107,6 +115,7 @@ where
liftM2 App ident (pToken TParenOpen *> pSepBy expr (pToken TComma) <* pToken TParenClose)
<|> Var <$> ident
<|> Int <$> int
+ <|> Bool <$> bool
<|> (pToken TParenOpen *> expr <* pToken TParenClose)
ident :: Parser Token String
@@ -118,6 +127,11 @@ arg =: ident
int :: Parser Token Int
int =: (\(TInt n) -> n) <$> pSatisfy (\t->t=:TInt _)
+bool :: Parser Token Bool
+bool =:
+ pToken TTrue $> True
+ <|> pToken TFalse $> False
+
parse_function :: !String -> Either String Function
parse_function s = lex s >>= \tks -> case parse function tks of
Right f -> Right f