diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2017-03-18 09:58:17 +0000 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2017-03-18 09:58:17 +0000 |
commit | f8d984811645f0af6859deff1bf53250317ca542 (patch) | |
tree | 2759399fb9cfdc53c2459ca1664c1d0a7bb6dc50 /c_compiler/include/statement.hpp | |
parent | a9663b327230e08a6bc5cfe4f20ed8d066f33338 (diff) | |
download | Compiler-f8d984811645f0af6859deff1bf53250317ca542.tar.gz Compiler-f8d984811645f0af6859deff1bf53250317ca542.zip |
added while loop and if working
Diffstat (limited to 'c_compiler/include/statement.hpp')
-rw-r--r-- | c_compiler/include/statement.hpp | 46 |
1 files changed, 36 insertions, 10 deletions
diff --git a/c_compiler/include/statement.hpp b/c_compiler/include/statement.hpp index fe509c2..ce96543 100644 --- a/c_compiler/include/statement.hpp +++ b/c_compiler/include/statement.hpp @@ -1,5 +1,5 @@ -#ifndef AST_STATEMENT_HPP -#define AST_STATEMENT_HPP +#ifndef STATEMENT_HPP +#define STATEMENT_HPP #include "bindings.hpp" #include "declaration.hpp" @@ -13,7 +13,8 @@ class Statement; typedef std::shared_ptr<Statement> StatementPtr; -class Statement : public Node { +class Statement : public Node +{ protected: StatementPtr next_statement_; @@ -31,7 +32,8 @@ public: }; -class CompoundStatement : public Statement { +class CompoundStatement : public Statement +{ protected: DeclarationPtr declaration_; StatementPtr statement_; @@ -49,7 +51,8 @@ public: }; -class SelectionStatement : public Statement { +class SelectionStatement : public Statement +{ protected: ExpressionPtr condition_; StatementPtr if_; @@ -66,7 +69,8 @@ public: }; -class ExpressionStatement : public Statement { +class ExpressionStatement : public Statement +{ protected: ExpressionPtr expression_; public: @@ -81,7 +85,8 @@ public: }; -class JumpStatement : public Statement { +class JumpStatement : public Statement +{ protected: ExpressionPtr expression_; public: @@ -96,19 +101,40 @@ public: }; -class IterationStatement : public Statement { +class IterationStatement : public Statement +{ protected: + ExpressionPtr condition_; StatementPtr statement_; public: - IterationStatement(Statement* statement); + IterationStatement(Expression* condition, Statement* statement); virtual void print() const; virtual void printXml() const; - virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const; + virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const = 0; virtual void countVariables(unsigned& var_count) const; virtual void countArguments(unsigned& argument_count) const; }; +class WhileLoop : public IterationStatement +{ +public: + WhileLoop(Expression* condition, Statement* statement); + + virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_cout) const; +}; + +class ForLoop : public IterationStatement +{ +private: + ExpressionPtr initializer_; + ExpressionPtr incrementer_; +public: + ForLoop(Expression* intializer, Expression* condition, Expression* incrementer, Statement* statement); + + virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const; +}; + #endif |