#ifndef AST_STATEMENT_HPP #define AST_STATEMENT_HPP #include "ast.hpp" class Statement : public Node { protected: Statement* next_statement; public: Statement(Statement* statement = nullptr); virtual void print() const = 0; virtual void printxml() const = 0; virtual void printasm() const = 0; void addStatement(Statement* _next) { next_statement = _next; } }; class CompoundStatement : public Statement { protected: Declaration* m_decl; Statement* m_statement; public: CompoundStatement(Declaration* decl = nullptr, Statement* statement = nullptr); CompoundStatement(Statement* statement); virtual void print() const; virtual void printxml() const; virtual void printasm() const; }; class SelectionStatement : public Statement { protected: Statement* m_if; Statement* m_else; public: SelectionStatement(Statement* _if = nullptr, Statement* _else = nullptr); virtual void print() const; virtual void printxml() const; virtual void printasm() const; }; class ExpressionStatement : public Statement { protected: Expression* m_expr; public: ExpressionStatement(Expression* expr = nullptr); virtual void print() const; virtual void printxml() const; virtual void printasm() const; }; class JumpStatement : public Statement { protected: Expression* m_expr; public: JumpStatement(Expression* expr = nullptr); virtual void print() const; virtual void printxml() const; virtual void printasm() const; }; class IterationStatement : public Statement { protected: Statement* m_statement; public: IterationStatement(Statement* statement); virtual void print() const; virtual void printxml() const; virtual void printasm() const; }; #endif