-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparser.cpp
67 lines (50 loc) · 1.35 KB
/
parser.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
#include "parser.h"
bool in_vector(std::vector<std::string> vec, std::string key) {
return std::count(vec.begin(), vec.end(), key);
}
AST::AST() : tok(nullptr) {
tree = std::vector<AST>(0);
}
std::string AST::repr() {
if (tok != nullptr) {
return tok->repr();
}
for (auto& element : tree) {
return element.repr();
}
}
bool Parser::is_legal(std::string name) {
if (std::count(savedwords.begin(), savedwords.end(), name)) {
return false;
} else {
return true;
}
}
void Parser::build(Build build) {
switch (build) {
}
}
Parser::Parser(Lexer lex) {
tokens = lex.getTokens();
pos = 0;
main = AST();
workingtree = &main;
while (pos < tokens.size()) {
current_token = &tokens[pos];
if (current_token->get_type() == Token::Type::keyword) {
// *- keyword case -*
if (current_token->s_value == "define") {
AST ntree = AST();
} else if (current_token->s_value == "var") {
}
} else if (current_token->get_type() == Token::Type::left_parenthesis) {
/*
*- function case -*
`
([parameters]) =>
[indented block]
`
*/
}
}
}