-
Notifications
You must be signed in to change notification settings - Fork 0
/
parser.h
37 lines (32 loc) · 1.1 KB
/
parser.h
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
#pragma once
#include "lexer.h"
#include "expression.h"
using namespace std;
class Parser {
private:
shared_ptr<Lexer> l;
shared_ptr<Environment> names;
unique_ptr<Expression> parse_variable();
unique_ptr<Expression> parse_application();
unique_ptr<Expression> parse_abstraction();
unique_ptr<Expression> parse_parenthetical();
unique_ptr<Expression> parse_non_application();
unique_ptr<Expression> parse_expression();
unique_ptr<Expression> parse_assignment();
public:
Parser(shared_ptr<Lexer> lexer = shared_ptr<Lexer>(), shared_ptr<Environment> env = shared_ptr<Environment>()) {
if (lexer != nullptr) {
l = lexer;
} else {
l = make_shared<Lexer>();
}
if (env != nullptr) {
names = env;
} else {
names = make_shared<Environment>();
}
}
shared_ptr<Lexer> get_lexer() { return l; }
shared_ptr<Environment> get_env() { return names; }
unique_ptr<Expression> parse();
};