From 35742aa52587400950cf25170c2247f98f498d4d Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Fri, 4 Oct 2024 18:26:10 +0200 Subject: Add printc and exit builtin functions --- lib/Language/Elna/Glue.hs | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) (limited to 'lib/Language/Elna/Glue.hs') diff --git a/lib/Language/Elna/Glue.hs b/lib/Language/Elna/Glue.hs index 2313b2b..85c8401 100644 --- a/lib/Language/Elna/Glue.hs +++ b/lib/Language/Elna/Glue.hs @@ -70,6 +70,8 @@ statement localTable (AST.CallStatement (AST.Identifier callName) arguments) = d $ CallQuadruple callName $ fromIntegral $ Vector.length argumentStatements +statement localTable (AST.CompoundStatement statements) = + fold <$> traverse (statement localTable) statements {- statement localTable (AST.AssignmentStatement variableAccess' assignee) = do (rhsOperand, rhsStatements) <- expression localTable assignee let variableType' = variableType variableAccess' localTable @@ -105,9 +107,7 @@ statement localTable (AST.WhileStatement whileCondition whileStatement) = do <> conditionStatements <> Vector.fromList [jumpConstructor startLabel, GoToQuadruple endLabel, LabelQuadruple startLabel] <> whileStatements - <> Vector.fromList [GoToQuadruple conditionLabel, LabelQuadruple endLabel] -statement localTable (AST.CompoundStatement statements) = - fold <$> traverse (statement localTable) statements -} + <> Vector.fromList [GoToQuadruple conditionLabel, LabelQuadruple endLabel] -} createTemporary :: Glue Variable createTemporary = do @@ -233,6 +233,8 @@ expression localTable = \case ( VariableOperand tempVariable , Vector.snoc statements negationQuadruple ) + (AST.ProductExpression lhs rhs) -> + binaryExpression ProductQuadruple lhs rhs {- (AST.VariableExpression variableExpression) -> do let variableType' = variableType variableExpression localTable variableAccess' <- variableAccess localTable variableExpression Nothing variableType' mempty @@ -246,8 +248,6 @@ expression localTable = \case ( VariableOperand arrayAddress , Vector.snoc statements arrayStatement ) - (AST.ProductExpression lhs rhs) -> - binaryExpression ProductQuadruple lhs rhs (AST.DivisionExpression lhs rhs) -> binaryExpression DivisionQuadruple lhs rhs -} where @@ -263,8 +263,5 @@ expression localTable = \case literal :: AST.Literal -> Operand Variable literal (AST.IntegerLiteral integer) = IntOperand integer -{-literal (AST.HexadecimalLiteral integer) = IntOperand integer +literal (AST.HexadecimalLiteral integer) = IntOperand integer literal (AST.CharacterLiteral character) = IntOperand $ fromIntegral character -literal (AST.BooleanLiteral boolean) - | boolean = IntOperand 1 - | otherwise = IntOperand 0 -} -- cgit v1.2.3