From 8afc5e6b37b4b212f7ffb85e7bca6b0dad6c12a0 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Tue, 25 Dec 2018 00:00:45 +0100 Subject: Add booleans, encoded as 1 and 0 --- Sjit/Syntax.icl | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'Sjit/Syntax.icl') 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 -- cgit v1.2.3