-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathParseTree.cpp
73 lines (61 loc) · 1.04 KB
/
ParseTree.cpp
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
#include "ParseTree.h"
#include "String.h"
// Node functions
parse_tree_node::parse_tree_node ()
{
type = NOP;
value = nullptr;
jump_to = nullptr;
}
parse_tree_node::~parse_tree_node ()
{
if (value) {
if (value_type == STRING_VAL)
delete (String *) value;
else if (value_type == NUM_VAL)
delete (int32_t *) value;
else // if (value_type == NODE_VAL)
delete (parse_tree_node *) value;
value = nullptr;
}
for (int i = 0; i < args.size(); i++)
if (args[i]) {
delete args[i];
args[i] = nullptr;
}
if (jump_to) {
delete jump_to;
jump_to = nullptr;
}
}
// Tree functions
parse_tree::parse_tree ()
{
head = new parse_tree_node;
head->type = NOP;
end = head;
}
parse_tree::~parse_tree ()
{
if (head) {
delete head;
head = nullptr;
}
}
void parse_tree::push_back (parse_tree_node * new_node)
{
end->jump_to = new_node;
end = new_node;
}
void parse_tree::strip ()
{
head = end = nullptr;
}
parse_tree_node * parse_tree::begin ()
{
return this->head;
}
parse_tree_node * parse_tree::last ()
{
return this->end;
}