Implement comparison operators

This commit is contained in:
2024-10-13 12:59:47 +02:00
parent 0850f0a8d6
commit 582040e5d3
19 changed files with 261 additions and 43 deletions

View File

@@ -146,18 +146,18 @@ instance Show VariableAccess
-}
data Condition
= EqualCondition Expression Expression
-- | NonEqualCondition Expression Expression
-- | LessCondition Expression Expression
-- | GreaterCondition Expression Expression
-- | LessOrEqualCondition Expression Expression
-- | GreaterOrEqualCondition 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]
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]

View File

@@ -175,21 +175,21 @@ condition :: SymbolTable -> AST.Condition -> NameAnalysis ()
condition globalTable (AST.EqualCondition lhs rhs)
= expression globalTable lhs
>> expression globalTable rhs
--condition globalTable (AST.NonEqualCondition lhs rhs)
-- = expression globalTable lhs
-- >> expression globalTable rhs
--condition globalTable (AST.LessCondition lhs rhs)
-- = expression globalTable lhs
-- >> expression globalTable rhs
--condition globalTable (AST.GreaterCondition lhs rhs)
-- = expression globalTable lhs
-- >> expression globalTable rhs
--condition globalTable (AST.LessOrEqualCondition lhs rhs)
-- = expression globalTable lhs
-- >> expression globalTable rhs
--condition globalTable (AST.GreaterOrEqualCondition lhs rhs)
-- = expression globalTable lhs
-- >> expression globalTable rhs
condition globalTable (AST.NonEqualCondition lhs rhs)
= expression globalTable lhs
>> expression globalTable rhs
condition globalTable (AST.LessCondition lhs rhs)
= expression globalTable lhs
>> expression globalTable rhs
condition globalTable (AST.GreaterCondition lhs rhs)
= expression globalTable lhs
>> expression globalTable rhs
condition globalTable (AST.LessOrEqualCondition lhs rhs)
= expression globalTable lhs
>> expression globalTable rhs
condition globalTable (AST.GreaterOrEqualCondition lhs rhs)
= expression globalTable lhs
>> expression globalTable rhs
{-
variableAccess :: SymbolTable -> AST.VariableAccess -> NameAnalysis ()
variableAccess globalTable (AST.ArrayAccess arrayExpression indexExpression)

View File

@@ -105,12 +105,12 @@ conditionP = do
conditionCons lhs <$> expressionP
where
comparisonOperator =
--, symbol "<" >> pure LessCondition
--, symbol "<=" >> pure LessOrEqualCondition
--, symbol ">" >> pure GreaterCondition
--, symbol ">=" >> pure GreaterOrEqualCondition
[ symbol "=" >> pure EqualCondition
--, symbol "#" >> pure NonEqualCondition
[ symbol "<=" >> pure LessOrEqualCondition
, symbol "<" >> pure LessCondition
, symbol ">=" >> pure GreaterOrEqualCondition
, symbol ">" >> pure GreaterCondition
, symbol "=" >> pure EqualCondition
, symbol "#" >> pure NonEqualCondition
]
symbol :: Text -> Parser Text
@@ -183,8 +183,8 @@ statementP :: Parser Statement
statementP
= EmptyStatement <$ semicolonP
<|> ifElseP
{-<|> CompoundStatement <$> blockP (many statementP)
<|> try assignmentP
<|> CompoundStatement <$> blockP (many statementP)
{-<|> try assignmentP
<|> try whileP -}
<|> callP
<?> "statement"