aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorCori Barker <coribarker2@gmail.com>2026-03-05 22:02:03 +0000
committerCori Barker <coribarker2@gmail.com>2026-03-05 22:02:03 +0000
commit9b8263271ff129272daec3f09f84fd16a695f6c2 (patch)
treec1c7c0bb975bb0a4db49e055eefda837bd9c7d68 /include
parent5b1a49ccc676d9a3564050e203a7a68bf0ece578 (diff)
declared some more AST nodes
Diffstat (limited to 'include')
-rw-r--r--include/ast_node.hpp57
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) { }
+};