set up semantic visitor

This commit is contained in:
2024-08-13 14:03:23 +00:00
parent b010326e60
commit 1ba056f0ac
12 changed files with 661 additions and 62 deletions

View File

@ -10,43 +10,83 @@ class Statement_ASTNode : public ASTNodeBase {
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<std::pair<IdentifierType, std::shared_ptr<Expr_ASTNode>>> 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_ASTNode> 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<Expr_ASTNode> condition;
std::shared_ptr<Statement_ASTNode> if_clause;
std::shared_ptr<Statement_ASTNode> 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<Expr_ASTNode> condition;
std::shared_ptr<Statement_ASTNode> 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<Statement_ASTNode> initial;
std::shared_ptr<Expr_ASTNode> condition;
std::shared_ptr<Statement_ASTNode> update;
std::shared_ptr<Statement_ASTNode> 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<Expr_ASTNode> 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<std::shared_ptr<Statement_ASTNode>> statements;
public:
SuiteStatement_ASTNode() = default;
virtual void accept(class ASTNodeVisitorBase *visitor) override;
};
#endif // STATEMENT_ASTNODE_H