aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler/include/statement.hpp
diff options
context:
space:
mode:
authorYann Herklotz <ymherklotz@gmail.com>2017-03-18 09:58:17 +0000
committerYann Herklotz <ymherklotz@gmail.com>2017-03-18 09:58:17 +0000
commitf8d984811645f0af6859deff1bf53250317ca542 (patch)
tree2759399fb9cfdc53c2459ca1664c1d0a7bb6dc50 /c_compiler/include/statement.hpp
parenta9663b327230e08a6bc5cfe4f20ed8d066f33338 (diff)
downloadCompiler-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.hpp46
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