diff options
| author | Cori Barker <coribarker2@gmail.com> | 2026-03-05 22:02:03 +0000 |
|---|---|---|
| committer | Cori Barker <coribarker2@gmail.com> | 2026-03-05 22:02:03 +0000 |
| commit | 9b8263271ff129272daec3f09f84fd16a695f6c2 (patch) | |
| tree | c1c7c0bb975bb0a4db49e055eefda837bd9c7d68 /include | |
| parent | 5b1a49ccc676d9a3564050e203a7a68bf0ece578 (diff) | |
declared some more AST nodes
Diffstat (limited to 'include')
| -rw-r--r-- | include/ast_node.hpp | 57 |
1 files changed, 48 insertions, 9 deletions
diff --git a/include/ast_node.hpp b/include/ast_node.hpp index 5338034..aa1a98f 100644 --- a/include/ast_node.hpp +++ b/include/ast_node.hpp @@ -25,11 +25,11 @@ public: class FunctionDeclarationNode : public ASTNode { public: std::string identifier; - std::vector<ParameterNode> parameters; + std::vector<ParameterNode*> parameters; Type return_type; - std::vector<StatementNode> body; + std::vector<ASTNode*> body; - FunctionDeclarationNode(std::string identifier, std::vector<ParameterNode> parameters, Type return_type, std::vector<StatementNode> body, int line, int col) : identifier(identifier), parameters(parameters), return_type(return_type), body(body), line(line), col(col) { } + FunctionDeclarationNode(std::string identifier, std::vector<ParameterNode*> parameters, Type return_type, std::vector<ASTNode*> body, int line, int col) : identifier(identifier), parameters(parameters), return_type(return_type), body(body), line(line), col(col) { } }; class ParameterNode : public ASTNode { @@ -41,27 +41,28 @@ public: }; class ArgumentNode : public ASTNode { +public: ASTNode* expression; - ASTNode* variable; + VariableNode* variable; - ArgumentNode(ASTNode* expression, ASTNode* variable, int line int column) : expression(expression), variable(variable), line(line), column(column) { } + ArgumentNode(ASTNode* expression, VariableNode* variable, int line int column) : expression(expression), variable(variable), line(line), column(column) { } }; class VariableDeclarationNode : public ASTNode { public: Type type; - std::string identifier; + VariableNode* variable; ASTNode* value; - VariableDeclarationNode(Type type, std::string identifier, ASTNode* value, int line, int column) : type(type), identifier(identifier), value(value), line(line), column(column) { } + VariableDeclarationNode(Type type, VariableNode* variable, ASTNode* value, int line, int column) : type(type), variable(variable), value(value), line(line), column(column) { } }; class VariableAssignmentNode : public ASTNode { public: - std::string identifier; + VariableNode* variable; ASTNode* value; - VariableAssignmentNode(std::string identifier, ASTNode* value, int line, int column) : identifier(identifier), value(value), line(line), column(column) { } + VariableAssignmentNode(VariableNode* variable, ASTNode* value, int line, int column) : variable(variable), value(value), line(line), column(column) { } }; class ReturnNode : public ASTNode { @@ -73,6 +74,7 @@ public: class BinaryOperationNode : public ASTNode { +public: char operation; ASTNode* left; ASTNode* right; @@ -81,6 +83,7 @@ class BinaryOperationNode : public ASTNode { }; class UnaryOperationNode : public ASTNode { +public: char operation; ASTNode* operand; @@ -88,21 +91,57 @@ class UnaryOperationNode : public ASTNode { }; class StringLiteralNode : public ASTNode { +public: std::string value; StringLiteralNode(std::string value, int line, int column) : value(value), line(line), column(column) { } }; class NumberLiteralNode : public ASTNode { +public: int value; NumberLiteralNode(int value, int line, int column) : value(value), line(line), column(column) { } }; class ComparisonNode : public ASTNode { +public: std::string operation; ASTNode* left; ASTNode* right; ComparisonNode(std::string operation, ASTNode* left, ASTNode* right, int line, int col) : operation(operation), left(left), right(right), line(line), column(column) { } }; + +class IfStatementNode : public ASTNode { +public: + ASTNode* expression; + ASTNode* body; + ASTNode* else_statement; + ASTNode* elif_statement; + + IfStatementNode(ASTNode* expression, ASTNode* body, ASTNode* else_statement, ASTNode* elif_statement, int line, int column) : expression(expression), body(body), else_statement(else_statement), elif_statement(elif_statement), line(line), column(column) { } +}; + +class WhileStatementNode : public ASTNode { +public: + ASTNode* expression; + ASTNode* body; + + WhileStatementNode(ASTNode* expression, ASTNode* body, int line, int column) : expression(expresssion), body(body), line(line), column(column) { } +}; + +class VariableNode : public ASTNode { +public: + std::string identifier; + + VariableNode(std::string identifier, int line, int column) : identifier(identifier), line(line), column(column) { } +}; + +class FunctionCallNode : public ASTNode { +public: + std::string identifier; + std::vectot<ArgumentNode*> arguments; + + FunctionCallNode(std::string identifier, std::vector<ArgumentNode*> arguments, int line, int column) : identifier(identifier), arguments(arguments), line(line), column(column) { } +}; |
