saqut-compiler/src/parser/nodes/statements.hpp

83 lines
2.0 KiB
C++

#ifndef SAQUT_AST_STMT
#define SAQUT_AST_STMT
#include "parser/ast_node.hpp"
class BlockNode : public ASTNode {
public:
BlockNode();
void log(int indent = 0) override;
std::string toJson(int depth = 0) override;
};
class IfStatementNode : public ASTNode {
public:
ASTNode* condition = nullptr;
ASTNode* thenBranch = nullptr;
ASTNode* elseBranch = nullptr;
IfStatementNode();
void log(int indent = 0) override;
std::string toJson(int depth = 0) override;
};
class WhileStatementNode : public ASTNode {
public:
ASTNode* condition = nullptr;
ASTNode* body = nullptr;
WhileStatementNode();
void log(int indent = 0) override;
std::string toJson(int depth = 0) override;
};
class ForStatementNode : public ASTNode {
public:
ASTNode* init = nullptr;
ASTNode* condition = nullptr;
ASTNode* update = nullptr;
ASTNode* body = nullptr;
ForStatementNode();
void log(int indent = 0) override;
std::string toJson(int depth = 0) override;
};
class DoWhileStatementNode : public ASTNode {
public:
ASTNode* condition = nullptr;
ASTNode* body = nullptr;
DoWhileStatementNode();
void log(int indent = 0) override;
std::string toJson(int depth = 0) override;
};
class ReturnStatementNode : public ASTNode {
public:
ASTNode* value = nullptr;
ReturnStatementNode();
void log(int indent = 0) override;
std::string toJson(int depth = 0) override;
};
class BreakStatementNode : public ASTNode {
public:
BreakStatementNode();
void log(int indent = 0) override;
std::string toJson(int depth = 0) override;
};
class ContinueStatementNode : public ASTNode {
public:
ContinueStatementNode();
void log(int indent = 0) override;
std::string toJson(int depth = 0) override;
};
class ExpressionStatementNode : public ASTNode {
public:
ASTNode* expression = nullptr;
ExpressionStatementNode();
void log(int indent = 0) override;
std::string toJson(int depth = 0) override;
};
#endif