diff options
| author | Cori Barker <coribarker2@gmail.com> | 2026-02-23 15:45:03 +0000 |
|---|---|---|
| committer | Cori Barker <coribarker2@gmail.com> | 2026-02-23 15:45:03 +0000 |
| commit | 4b33b1f31862cd505fd9c90cf8d2e696c6f6ec97 (patch) | |
| tree | fa2c5cd9aec9fed35dd482b60237e52d26203bfe /include/ast_node.hpp | |
| parent | 5c1f937a7eb7a9cc9cd86cb69b3263f41f24408f (diff) | |
partial refactor of ast_node.hpp
Diffstat (limited to 'include/ast_node.hpp')
| -rw-r--r-- | include/ast_node.hpp | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/include/ast_node.hpp b/include/ast_node.hpp index caffb35..f1fcaf2 100644 --- a/include/ast_node.hpp +++ b/include/ast_node.hpp @@ -10,7 +10,7 @@ class ASTNode { public: int line; - int column; + int col; virtual ~ASTNode() = default; }; @@ -19,7 +19,7 @@ class ProgramNode : ASTNode { public: std::vector<ASTNode> function_declarations; - explicit ProgramNode(std::vector<ASTNode> f) : function_declarations(f) { } + ProgramNode(std::vector<ASTNode> function_declarations, int line, int col) : function_declarations(function_declarations), line(line), col(col) { } }; class FunctionDeclNode : ASTNode { @@ -27,10 +27,48 @@ class FunctionDeclNode : ASTNode { std::vector<ParameterNode> parameters; std::vector<ASTNode> body; - FunctionDeclNode(std::string t,std::vector<ASTNode> p, std::vector<ASTNode> b) : type(t), parameters(p), body(b) { } + FunctionDeclNode(Type type, std::vector<ASTNode> parameters, std::vector<ASTNode> body, int line, int col) : type(type), parameters(parameters), body(body), line(line), col(col) { } }; class ParameterNode : ASTNode { std::string name; - std::string type; + Type type; + + ParameterNode(std::string name, std::string type, int line, int col) : name(name), type(type), line(line) col(col) { } +}; + +class VarDeclNode : ASTNode { + std::string name; + Type type; + + VarDeclNode(std::string name, std::string type, int line, int col) : name(name), type(type), line(line), col(col) { } +}; + +class AssignmentNode : ASTNode { + std::string var_name; + Type var_type; + ASTNode* value; + + AssignmentNode(std::string var_name, Type var_type, ASTNode* value) : var_name(var_name), var_type(var_type), value(value), line(line), col(col) { } +}; + +class IfStatementNode : ASTNode { + ASTNode* expression; + ASTNode* body; + ASTNode* else_statement = nullptr; + ASTNode* elif_statement = nullptr; + + IfStatementNode(ASTNode* expression, ASTNode* body, ASTNode* else_statement, ASTNode* elif_statement, int line, int col) : expression(expression), body(body), else_statement(else_statement), elif_statement(elif_statement), line(line), col(col) { } +}; + +class WhileStatementNode : ASTNode { + ASTNode* expression; + ASTNode* body; + + WhileStatementNode(ASTNode* expression, ASTNode* body, int line, int col) : expression(expression), body(body), line(line), col(col) { } +}; + +class ForStatementNode : ASTNode { + StatementNode* init; + ASTNode* }; |
