aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/ast_node.hpp46
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*
};