diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2017-03-22 22:34:24 +0000 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2017-03-22 22:34:24 +0000 |
commit | ffb5df0e59d93fd5322ef02e337f713ed56c262f (patch) | |
tree | 7c93e278d8b005b94aaab1fa171f3c9644fefac4 /c_compiler/include/statement.hpp | |
parent | 561b76bdebd584d03d4e451375777651a9d74017 (diff) | |
download | Compiler-ffb5df0e59d93fd5322ef02e337f713ed56c262f.tar.gz Compiler-ffb5df0e59d93fd5322ef02e337f713ed56c262f.zip |
Switch working
Diffstat (limited to 'c_compiler/include/statement.hpp')
-rw-r--r-- | c_compiler/include/statement.hpp | 137 |
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; }; |