#ifndef STATEMENT_ASTNODE_H #define STATEMENT_ASTNODE_H #include #include "astnode.h" #include "expr_astnode.h" class Statement_ASTNode : public ASTNodeBase { public: virtual ~Statement_ASTNode() = default; }; class EmptyStatement_ASTNode : public Statement_ASTNode { friend Visitor; friend class ASTSemanticCheckVisitor; public: EmptyStatement_ASTNode() = default; virtual void accept(class ASTNodeVisitorBase *visitor) override; }; class DefinitionStatement_ASTNode : public Statement_ASTNode { friend Visitor; friend class ASTSemanticCheckVisitor; ExprTypeInfo var_type; std::vector>> vars; public: DefinitionStatement_ASTNode() = default; virtual void accept(class ASTNodeVisitorBase *visitor) override; }; class ExprStatement_ASTNode : public Statement_ASTNode { friend Visitor; friend class ASTSemanticCheckVisitor; std::shared_ptr expr; public: ExprStatement_ASTNode() = default; virtual void accept(class ASTNodeVisitorBase *visitor) override; }; class IfStatement_ASTNode : public Statement_ASTNode { friend Visitor; friend class ASTSemanticCheckVisitor; bool has_else_clause; std::shared_ptr condition; std::shared_ptr if_clause; std::shared_ptr else_clause; public: IfStatement_ASTNode() = default; virtual void accept(class ASTNodeVisitorBase *visitor) override; }; class WhileStatement_ASTNode : public Statement_ASTNode { friend Visitor; friend class ASTSemanticCheckVisitor; std::shared_ptr condition; std::shared_ptr loop_body; public: WhileStatement_ASTNode() = default; virtual void accept(class ASTNodeVisitorBase *visitor) override; }; class ForStatement_ASTNode : public Statement_ASTNode { friend Visitor; friend class ASTSemanticCheckVisitor; std::shared_ptr initial; std::shared_ptr condition; std::shared_ptr update; std::shared_ptr loop_body; public: ForStatement_ASTNode() = default; virtual void accept(class ASTNodeVisitorBase *visitor) override; }; class JmpStatement_ASTNode : public Statement_ASTNode { friend Visitor; friend class ASTSemanticCheckVisitor; uint8_t jmp_type; // 0: return, 1: break, 2: continue std::shared_ptr return_value; public: JmpStatement_ASTNode() = default; virtual void accept(class ASTNodeVisitorBase *visitor) override; }; class SuiteStatement_ASTNode : public Statement_ASTNode { friend Visitor; friend class ASTSemanticCheckVisitor; std::vector> statements; public: SuiteStatement_ASTNode() = default; virtual void accept(class ASTNodeVisitorBase *visitor) override; }; #endif // STATEMENT_ASTNODE_H