From d405072dbf166cc8c0f9ed49e4edb26afff498b3 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Thu, 15 Aug 2024 20:13:56 +0200 Subject: Access multidimensional arrays --- lib/Language/Elna/AST.hs | 56 +++++++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 20 deletions(-) (limited to 'lib/Language/Elna/AST.hs') diff --git a/lib/Language/Elna/AST.hs b/lib/Language/Elna/AST.hs index 189fcb5..ac86e63 100644 --- a/lib/Language/Elna/AST.hs +++ b/lib/Language/Elna/AST.hs @@ -1,5 +1,7 @@ module Language.Elna.AST - ( Declaration(..) + ( VariableAccess(..) + , Condition(..) + , Declaration(..) , Expression(..) , Identifier(..) , Literal(..) @@ -44,21 +46,25 @@ instance Show Literal | boolean = "true" | otherwise = "false" +data VariableAccess + = VariableAccess Identifier + | ArrayAccess VariableAccess Expression + deriving Eq + +instance Show VariableAccess + where + show (VariableAccess variableName) = show variableName + show (ArrayAccess arrayAccess elementIndex) = + concat [show arrayAccess, "[", show elementIndex, "]"] + data Expression - = VariableExpression Identifier + = VariableExpression VariableAccess | LiteralExpression Literal | NegationExpression Expression | SumExpression Expression Expression | SubtractionExpression Expression Expression | ProductExpression Expression Expression | DivisionExpression Expression Expression - | EqualExpression Expression Expression - | NonEqualExpression Expression Expression - | LessExpression Expression Expression - | GreaterExpression Expression Expression - | LessOrEqualExpression Expression Expression - | GreaterOrEqualExpression Expression Expression - | ArrayExpression Expression Expression deriving Eq instance Show Expression @@ -70,20 +76,30 @@ instance Show Expression show (SubtractionExpression lhs rhs) = concat [show lhs, " - ", show rhs] show (ProductExpression lhs rhs) = concat [show lhs, " * ", show rhs] show (DivisionExpression lhs rhs) = concat [show lhs, " / ", show rhs] - show (EqualExpression lhs rhs) = concat [show lhs, " = ", show rhs] - show (NonEqualExpression lhs rhs) = concat [show lhs, " # ", show rhs] - show (LessExpression lhs rhs) = concat [show lhs, " < ", show rhs] - show (GreaterExpression lhs rhs) = concat [show lhs, " > ", show rhs] - show (LessOrEqualExpression lhs rhs) = concat [show lhs, " <= ", show rhs] - show (GreaterOrEqualExpression lhs rhs) = concat [show lhs, " >= ", show rhs] - show (ArrayExpression arrayExpression indexExpression) = - concat [show arrayExpression, "[", show indexExpression, "]"] + +data Condition + = EqualCondition Expression Expression + | NonEqualCondition Expression Expression + | LessCondition Expression Expression + | GreaterCondition Expression Expression + | LessOrEqualCondition Expression Expression + | GreaterOrEqualCondition Expression Expression + deriving Eq + +instance Show Condition + where + show (EqualCondition lhs rhs) = concat [show lhs, " = ", show rhs] + show (NonEqualCondition lhs rhs) = concat [show lhs, " # ", show rhs] + show (LessCondition lhs rhs) = concat [show lhs, " < ", show rhs] + show (GreaterCondition lhs rhs) = concat [show lhs, " > ", show rhs] + show (LessOrEqualCondition lhs rhs) = concat [show lhs, " <= ", show rhs] + show (GreaterOrEqualCondition lhs rhs) = concat [show lhs, " >= ", show rhs] data Statement = EmptyStatement - | AssignmentStatement Expression Expression - | IfStatement Expression Statement (Maybe Statement) - | WhileStatement Expression Statement + | AssignmentStatement VariableAccess Expression + | IfStatement Condition Statement (Maybe Statement) + | WhileStatement Condition Statement | CompoundStatement [Statement] | CallStatement Identifier [Expression] deriving Eq -- cgit v1.2.3