aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler/include/statement.hpp
diff options
context:
space:
mode:
authorYann Herklotz <ymherklotz@gmail.com>2017-03-22 22:34:24 +0000
committerYann Herklotz <ymherklotz@gmail.com>2017-03-22 22:34:24 +0000
commitffb5df0e59d93fd5322ef02e337f713ed56c262f (patch)
tree7c93e278d8b005b94aaab1fa171f3c9644fefac4 /c_compiler/include/statement.hpp
parent561b76bdebd584d03d4e451375777651a9d74017 (diff)
downloadCompiler-ffb5df0e59d93fd5322ef02e337f713ed56c262f.tar.gz
Compiler-ffb5df0e59d93fd5322ef02e337f713ed56c262f.zip
Switch working
Diffstat (limited to 'c_compiler/include/statement.hpp')
-rw-r--r--c_compiler/include/statement.hpp137
1 files changed, 97 insertions, 40 deletions
diff --git a/c_compiler/include/statement.hpp b/c_compiler/include/statement.hpp
index ba12911..a34e22d 100644
--- a/c_compiler/include/statement.hpp
+++ b/c_compiler/include/statement.hpp
@@ -19,19 +19,64 @@ protected:
StatementPtr next_statement_;
public:
- Statement(Statement* statement = nullptr);
+ Statement(Statement *statement = nullptr);
virtual void print() const = 0;
virtual void printXml() const = 0;
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const = 0;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const = 0;
- virtual void countVariables(unsigned& var_count) const = 0;
- virtual void countArguments(unsigned& argument_count) const = 0;
- virtual void countExpressionDepth(unsigned& depth_count) const = 0;
+ virtual void countVariables(unsigned &var_count) const = 0;
+ virtual void countArguments(unsigned &argument_count) const = 0;
+ virtual void countExpressionDepth(unsigned &depth_count) const = 0;
- void linkStatement(Statement* next);
+ virtual int constantFold() const;
+ virtual StatementPtr getStatementList() const;
+ virtual ExpressionPtr getExpression() const;
+ virtual bool isDefault() const;
+
+ void linkStatement(Statement *next);
+ StatementPtr getNext() const;
};
+class LabelStatement : public Statement
+{
+private:
+ std::string label_;
+ StatementPtr statement_;
+
+public:
+ LabelStatement(const std::string &label, Statement *statement);
+
+ virtual void print() const;
+ virtual void printXml() const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
+
+ virtual void countVariables(unsigned &var_count) const;
+ virtual void countArguments(unsigned &argument_count) const;
+ virtual void countExpressionDepth(unsigned &depth_count) const;
+};
+
+class CaseStatement : public Statement
+{
+private:
+ ExpressionPtr constant_expression_;
+ StatementPtr statement_;
+ bool default_;
+
+public:
+ CaseStatement(Statement *statement, Expression *constant_expression_ = nullptr, const bool &_default = false);
+
+ virtual void print() const;
+ virtual void printXml() const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
+
+ virtual void countVariables(unsigned &var_count) const;
+ virtual void countArguments(unsigned &argument_count) const;
+ virtual void countExpressionDepth(unsigned &depth_count) const;
+ virtual int constantFold() const;
+ virtual ExpressionPtr getExpression() const;
+ virtual bool isDefault() const;
+};
class CompoundStatement : public Statement
{
@@ -40,55 +85,69 @@ protected:
StatementPtr statement_;
public:
- CompoundStatement(Declaration* declaration = nullptr, Statement* statement = nullptr);
- CompoundStatement(Statement* statement);
+ CompoundStatement(Declaration *declaration = nullptr, Statement *statement = nullptr);
+ CompoundStatement(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;
- virtual void countVariables(unsigned& var_count) const;
- virtual void countArguments(unsigned& argument_count) const;
- virtual void countExpressionDepth(unsigned& depth_count) const;
+ virtual void countVariables(unsigned &var_count) const;
+ virtual void countArguments(unsigned &argument_count) const;
+ virtual void countExpressionDepth(unsigned &depth_count) const;
+ virtual StatementPtr getStatementList() const;
};
-
class IfElseStatement : public Statement
{
-protected:
+private:
ExpressionPtr condition_;
StatementPtr if_;
StatementPtr else_;
public:
- IfElseStatement(Expression* condition, Statement* _if, Statement* _else = nullptr);
+ IfElseStatement(Expression *condition, Statement *_if, Statement *_else = nullptr);
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;
- virtual void countVariables(unsigned& var_count) const;
- virtual void countArguments(unsigned& argument_count) const;
- virtual void countExpressionDepth(unsigned& depth_count) const;
+ virtual void countVariables(unsigned &var_count) const;
+ virtual void countArguments(unsigned &argument_count) const;
+ virtual void countExpressionDepth(unsigned &depth_count) const;
};
+class SwitchStatement : public Statement
+{
+private:
+ ExpressionPtr condition_;
+ StatementPtr statement_;
+public:
+ SwitchStatement(Expression *condition, Statement *statement);
+ virtual void print() const;
+ virtual void printXml() const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
+
+ virtual void countVariables(unsigned &var_count) const;
+ virtual void countArguments(unsigned &argument_count) const;
+ virtual void countExpressionDepth(unsigned &depth_count) const;
+};
class ExpressionStatement : public Statement
{
protected:
ExpressionPtr expression_;
public:
- ExpressionStatement(Expression* expression = nullptr);
+ ExpressionStatement(Expression *expression = nullptr);
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;
- virtual void countVariables(unsigned& var_count) const;
- virtual void countArguments(unsigned& argument_count) const;
- virtual void countExpressionDepth(unsigned& depth_count) const;
+ virtual void countVariables(unsigned &var_count) const;
+ virtual void countArguments(unsigned &argument_count) const;
+ virtual void countExpressionDepth(unsigned &depth_count) const;
};
-
class JumpStatement : public Statement
{
public:
@@ -102,19 +161,18 @@ public:
virtual void countExpressionDepth(unsigned &depth_count) const;
};
-
class ReturnStatement : public JumpStatement
{
private:
ExpressionPtr expression_;
public:
- ReturnStatement(Expression* expression = nullptr);
+ ReturnStatement(Expression *expression = nullptr);
virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
- virtual void countVariables(unsigned& var_count) const;
- virtual void countArguments(unsigned& argument_count) const;
- virtual void countExpressionDepth(unsigned& depth_count) const;
+ virtual void countVariables(unsigned &var_count) const;
+ virtual void countArguments(unsigned &argument_count) const;
+ virtual void countExpressionDepth(unsigned &depth_count) const;
};
class BreakStatement : public JumpStatement
@@ -143,22 +201,21 @@ public:
virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &) const;
};
-
class IterationStatement : public Statement
{
protected:
ExpressionPtr condition_;
StatementPtr statement_;
public:
- IterationStatement(Expression* condition, Statement* statement);
+ IterationStatement(Expression *condition, Statement *statement);
virtual void print() const;
virtual void printXml() const;
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const = 0;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const = 0;
- virtual void countVariables(unsigned& var_count) const;
- virtual void countArguments(unsigned& argument_count) const;
- virtual void countExpressionDepth(unsigned& depth_count) const;
+ virtual void countVariables(unsigned &var_count) const;
+ virtual void countArguments(unsigned &argument_count) const;
+ virtual void countExpressionDepth(unsigned &depth_count) const;
};
class WhileLoop : public IterationStatement
@@ -166,9 +223,9 @@ class WhileLoop : public IterationStatement
private:
bool is_while_;
public:
- WhileLoop(Expression* condition, Statement* statement, const bool &is_while = true);
+ WhileLoop(Expression *condition, Statement *statement, const bool &is_while = true);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
};
class ForLoop : public IterationStatement
@@ -177,9 +234,9 @@ private:
ExpressionPtr initializer_;
ExpressionPtr incrementer_;
public:
- ForLoop(Expression* initializer, Expression* condition, Expression* incrementer, Statement* statement);
+ ForLoop(Expression *initializer, Expression *condition, Expression *incrementer, Statement *statement);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
};