diff options
Diffstat (limited to 'Sjit/Syntax.icl')
-rw-r--r-- | Sjit/Syntax.icl | 16 |
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 |