From aaf2ef628772e5789203544ac6226b467891d1d9 Mon Sep 17 00:00:00 2001 From: "Juan J. Martinez" Date: Tue, 30 Aug 2022 21:02:24 +0100 Subject: Boolean type, and true/false symbols --- src/Ast.hs | 1 + src/Compiler.hs | 1 + src/Lexer.hs | 2 +- src/Parser.hs | 14 ++++++++++++++ 4 files changed, 17 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/Ast.hs b/src/Ast.hs index aa6a5c8..3d351c6 100644 --- a/src/Ast.hs +++ b/src/Ast.hs @@ -21,6 +21,7 @@ type FuncParam = (Ident, Type, SourcePos) data Expr = Num Integer SourcePos + | Bool' Bool SourcePos | BinOp Op Expr Expr | Var Ident SourcePos | -- fn [params] return body private anomyous pos diff --git a/src/Compiler.hs b/src/Compiler.hs index bdbc5f3..f788c11 100644 --- a/src/Compiler.hs +++ b/src/Compiler.hs @@ -82,6 +82,7 @@ compile x = do case x of (A.Module name pos) -> return $ Right Nothing (A.Num _ _) -> return $ Right $ Just $ A.Type "u8" -- TODO: placeholder + (A.Bool' _ _) -> return $ Right $ Just $ A.Type "bool" (A.BinOp _ a b) -> do l <- compile a r <- compile b diff --git a/src/Lexer.hs b/src/Lexer.hs index 83a1391..1778b21 100644 --- a/src/Lexer.hs +++ b/src/Lexer.hs @@ -10,7 +10,7 @@ scanner :: T.TokenParser () scanner = T.makeTokenParser style where ops = ["+", "*", "-", ";"] - names = ["module", "private", "def", "return", "->"] + names = ["module", "private", "def", "return", "->", "true", "false"] style = emptyDef { T.commentLine = "#", diff --git a/src/Parser.hs b/src/Parser.hs index 41f2ba3..ea698c8 100644 --- a/src/Parser.hs +++ b/src/Parser.hs @@ -27,6 +27,18 @@ number = do n <- integer return $ Num n pos +true :: Parser Expr +true = do + pos <- getPosition + reserved "true" + return $ Bool' True pos + +false :: Parser Expr +false = do + pos <- getPosition + reserved "false" + return $ Bool' False pos + variable :: Parser Expr variable = do pos <- getPosition @@ -107,6 +119,8 @@ call = do factor :: Parser Expr factor = number + <|> true + <|> false <|> try call <|> try lambda <|> try variable -- cgit v1.2.3