#ifndef PCC_STATEMENTNODE_HH #define PCC_STATEMENTNODE_HH #include #include "BaseNode.hh" #include "ExprNode.hh" namespace pcc { class StatementListNode : public BaseNode { public: StatementListNode(Context* context); void Append(std::shared_ptr child); virtual Value CodeGen(); private: std::list> childs_; }; class EmptyStatementNode : public BaseNode { public: EmptyStatementNode(Context* context); virtual Value CodeGen() override; }; class AssignStatementNode : public BaseNode { public: AssignStatementNode(Context* context, std::shared_ptr lhs, std::shared_ptr rhs); virtual Value CodeGen() override; protected: std::shared_ptr lhs_; std::shared_ptr rhs_; }; class IfStatementNode : public BaseNode { public: IfStatementNode(Context* context, std::shared_ptr expr, std::shared_ptr ThenPart, std::shared_ptr ElsePart); virtual Value CodeGen() override; protected: std::shared_ptr expr_; std::shared_ptr ThenPart_; std::shared_ptr ElsePart_; }; class WhileStatementNode : public BaseNode { public: WhileStatementNode(Context* context, std::shared_ptr expr, std::shared_ptr WhileBody); virtual Value CodeGen() override; protected: std::shared_ptr expr_; std::shared_ptr WhileBody_; }; class RepeatStatementNode : public BaseNode { public: RepeatStatementNode(Context* context, std::shared_ptr expr, std::shared_ptr RepeatBody); virtual Value CodeGen() override; protected: std::shared_ptr expr_; std::shared_ptr RepeatBody_; }; class ForStatementNode : public BaseNode { public: ForStatementNode(Context* context, std::shared_ptr variable, std::shared_ptr start, std::shared_ptr end, bool IsUpward, std::shared_ptr ForBody); virtual Value CodeGen() override; protected: std::shared_ptr variable_; std::shared_ptr start_; std::shared_ptr end_; bool IsUpward_; std::shared_ptr ForBody_; }; class BreakStatementNode : public BaseNode { public: BreakStatementNode(Context* context); virtual Value CodeGen() override; }; class ContinueStatementNode : public BaseNode { public: ContinueStatementNode(Context* context); virtual Value CodeGen() override; }; } // namespace pcc #endif