aboutsummaryrefslogtreecommitdiff
path: root/include/ast_node.hpp
diff options
context:
space:
mode:
authorCori Barker <coribarker2@gmail.com>2026-03-04 15:26:45 +0000
committerCori Barker <coribarker2@gmail.com>2026-03-04 15:26:45 +0000
commit5b1a49ccc676d9a3564050e203a7a68bf0ece578 (patch)
treee09aa6deb14ef9e5f62d253cecbbdbf89f84c12e /include/ast_node.hpp
parent8a95bb221d348966fe85a9735ae61722502e0d23 (diff)
removed bnf since not needed, and added some more nodes to the AST
Diffstat (limited to 'include/ast_node.hpp')
-rw-r--r--include/ast_node.hpp94
1 files changed, 64 insertions, 30 deletions
diff --git a/include/ast_node.hpp b/include/ast_node.hpp
index f1fcaf2..5338034 100644
--- a/include/ast_node.hpp
+++ b/include/ast_node.hpp
@@ -13,62 +13,96 @@ public:
int col;
virtual ~ASTNode() = default;
-};
+}
class ProgramNode : ASTNode {
public:
- std::vector<ASTNode> function_declarations;
+ std::vector<FunctionDeclarationNode> function_declarations;
- ProgramNode(std::vector<ASTNode> function_declarations, int line, int col) : function_declarations(function_declarations), line(line), col(col) { }
+ ProgramNode(std::vector<FunctionDeclarationNode> function_declarations, int line, int col) : function_declarations(function_declarations), line(line), col(col) { }
};
-class FunctionDeclNode : ASTNode {
- Type type;
+class FunctionDeclarationNode : public ASTNode {
+public:
+ std::string identifier;
std::vector<ParameterNode> parameters;
- std::vector<ASTNode> body;
+ Type return_type;
+ std::vector<StatementNode> body;
- 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) { }
+ 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) { }
};
-class ParameterNode : ASTNode {
- std::string name;
+class ParameterNode : public ASTNode {
+public:
Type type;
+ std::string identifier;
- ParameterNode(std::string name, std::string type, int line, int col) : name(name), type(type), line(line) col(col) { }
+ ParameterNode(Type type, std::string identifier, int line, int column) : type(type), identifier(identifier), line(line), column(column) { }
};
-class VarDeclNode : ASTNode {
- std::string name;
+class ArgumentNode : public ASTNode {
+ ASTNode* expression;
+ ASTNode* variable;
+
+ ArgumentNode(ASTNode* expression, ASTNode* variable, int line int column) : expression(expression), variable(variable), line(line), column(column) { }
+};
+
+class VariableDeclarationNode : public ASTNode {
+public:
Type type;
+ std::string identifier;
+ ASTNode* value;
- VarDeclNode(std::string name, std::string type, int line, int col) : name(name), type(type), line(line), col(col) { }
+ VariableDeclarationNode(Type type, std::string identifier, ASTNode* value, int line, int column) : type(type), identifier(identifier), value(value), line(line), column(column) { }
};
-class AssignmentNode : ASTNode {
- std::string var_name;
- Type var_type;
+class VariableAssignmentNode : public ASTNode {
+public:
+ std::string identifier;
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) { }
+
+ VariableAssignmentNode(std::string identifier, ASTNode* value, int line, int column) : identifier(identifier), value(value), line(line), column(column) { }
};
-class IfStatementNode : ASTNode {
+class ReturnNode : public ASTNode {
+public:
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) { }
+ ReturnNode(ASTNode* expression, int line, int column) : expression(expression), line(line), column(column) { }
};
-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 BinaryOperationNode : public ASTNode {
+ char operation;
+ ASTNode* left;
+ ASTNode* right;
+
+ BinaryOperationNode(std::string operation, ASTNode* left, ASTNode* right, int line, int column) : operation(operation), left(left), right(right), line(line), column(column) { }
};
-class ForStatementNode : ASTNode {
- StatementNode* init;
- ASTNode*
+class UnaryOperationNode : public ASTNode {
+ char operation;
+ ASTNode* operand;
+
+ UnaryOperationNode(char operation, ASTNode* operand, int line, int column) : operation(operation), operand(operand), line(line), column(column) { }
+};
+
+class StringLiteralNode : public ASTNode {
+ std::string value;
+
+ StringLiteralNode(std::string value, int line, int column) : value(value), line(line), column(column) { }
+};
+
+class NumberLiteralNode : public ASTNode {
+ int value;
+
+ NumberLiteralNode(int value, int line, int column) : value(value), line(line), column(column) { }
+};
+
+class ComparisonNode : public ASTNode {
+ 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) { }
};