1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#pragma once
#include "node_type.hpp"
#include "type.hpp"
#include <string>
#include <vector>
#include <memory>
class ASTNode {
public:
int line;
int col;
virtual ~ASTNode() = default;
};
class ProgramNode : ASTNode {
public:
std::vector<ASTNode> function_declarations;
ProgramNode(std::vector<ASTNode> function_declarations, int line, int col) : function_declarations(function_declarations), line(line), col(col) { }
};
class FunctionDeclNode : ASTNode {
Type type;
std::vector<ParameterNode> parameters;
std::vector<ASTNode> 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) { }
};
class ParameterNode : ASTNode {
std::string name;
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*
};
|