diff options
Diffstat (limited to 'lib/Language/Elna/Frontend')
| -rw-r--r-- | lib/Language/Elna/Frontend/AST.hs | 6 | ||||
| -rw-r--r-- | lib/Language/Elna/Frontend/NameAnalysis.hs | 6 | ||||
| -rw-r--r-- | lib/Language/Elna/Frontend/Parser.hs | 6 | ||||
| -rw-r--r-- | lib/Language/Elna/Frontend/TypeAnalysis.hs | 4 |
4 files changed, 11 insertions, 11 deletions
diff --git a/lib/Language/Elna/Frontend/AST.hs b/lib/Language/Elna/Frontend/AST.hs index e334370..df00d4b 100644 --- a/lib/Language/Elna/Frontend/AST.hs +++ b/lib/Language/Elna/Frontend/AST.hs @@ -71,7 +71,7 @@ data Statement = EmptyStatement | IfStatement Condition Statement (Maybe Statement) | AssignmentStatement VariableAccess Expression - -- | WhileStatement Condition Statement + | WhileStatement Condition Statement | CompoundStatement [Statement] | CallStatement Identifier [Expression] deriving Eq @@ -86,8 +86,8 @@ instance Show Statement ] show (AssignmentStatement lhs rhs) = concat [show lhs, " := ", show rhs, ";"] - {-show (WhileStatement expression statement) = - concat ["while (", show expression, ") ", show statement, ";"]-} + show (WhileStatement expression statement) = + concat ["while (", show expression, ") ", show statement, ";"] show (CompoundStatement statements) = concat ["{\n", unlines (show <$> statements), " }"] show (CallStatement name parameters) = show name <> "(" diff --git a/lib/Language/Elna/Frontend/NameAnalysis.hs b/lib/Language/Elna/Frontend/NameAnalysis.hs index 97a79e3..fbf5d51 100644 --- a/lib/Language/Elna/Frontend/NameAnalysis.hs +++ b/lib/Language/Elna/Frontend/NameAnalysis.hs @@ -175,9 +175,9 @@ statement globalTable (AST.IfStatement ifCondition ifStatement elseStatement) statement globalTable (AST.AssignmentStatement lvalue rvalue) = variableAccess globalTable lvalue >> expression globalTable rvalue ---statement globalTable (AST.WhileStatement whileCondition loop) --- = condition globalTable whileCondition --- >> statement globalTable loop +statement globalTable (AST.WhileStatement whileCondition loop) + = condition globalTable whileCondition + >> statement globalTable loop condition :: SymbolTable -> AST.Condition -> NameAnalysis () condition globalTable (AST.EqualCondition lhs rhs) diff --git a/lib/Language/Elna/Frontend/Parser.hs b/lib/Language/Elna/Frontend/Parser.hs index 98638f7..570c91f 100644 --- a/lib/Language/Elna/Frontend/Parser.hs +++ b/lib/Language/Elna/Frontend/Parser.hs @@ -188,7 +188,7 @@ statementP <|> ifElseP <|> CompoundStatement <$> blockP (many statementP) <|> try assignmentP - -- <|> try whileP + <|> try whileP <|> callP <?> "statement" where @@ -200,9 +200,9 @@ statementP <$> (symbol "if" *> parensP conditionP) <*> statementP <*> optional (symbol "else" *> statementP) - {-whileP = WhileStatement + whileP = WhileStatement <$> (symbol "while" *> parensP conditionP) - <*> statementP -} + <*> statementP assignmentP = AssignmentStatement <$> variableAccessP <* symbol ":=" diff --git a/lib/Language/Elna/Frontend/TypeAnalysis.hs b/lib/Language/Elna/Frontend/TypeAnalysis.hs index b9dcac1..c43e80e 100644 --- a/lib/Language/Elna/Frontend/TypeAnalysis.hs +++ b/lib/Language/Elna/Frontend/TypeAnalysis.hs @@ -101,11 +101,11 @@ statement globalTable = \case $ TypeAnalysis $ lift $ throwE $ InvalidConditionTypeError lhsType unless (rhsType == intType) $ TypeAnalysis $ lift $ throwE $ InvalidConditionTypeError rhsType - {- AST.WhileStatement whileCondition whileStatement -> do + AST.WhileStatement whileCondition whileStatement -> do conditionType <- condition globalTable whileCondition unless (conditionType == booleanType) $ TypeAnalysis $ lift $ throwE $ InvalidConditionTypeError conditionType - statement globalTable whileStatement -} + statement globalTable whileStatement AST.IfStatement ifCondition ifStatement elseStatement -> do conditionType <- condition globalTable ifCondition unless (conditionType == booleanType) |
