From 9b8263271ff129272daec3f09f84fd16a695f6c2 Mon Sep 17 00:00:00 2001 From: Cori Barker Date: Thu, 5 Mar 2026 22:02:03 +0000 Subject: declared some more AST nodes --- include/ast_node.hpp | 57 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 48 insertions(+), 9 deletions(-) (limited to 'include/ast_node.hpp') 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 parameters; + std::vector parameters; Type return_type; - std::vector body; + std::vector body; - FunctionDeclarationNode(std::string identifier, std::vector parameters, Type return_type, std::vector 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 parameters, Type return_type, std::vector 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 arguments; + + FunctionCallNode(std::string identifier, std::vector arguments, int line, int column) : identifier(identifier), arguments(arguments), line(line), column(column) { } +}; -- cgit v1.2.3