/
main.cpp
70 lines (61 loc) · 1019 Bytes
/
main.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
#include <iostream>
#include <iomanip>
#include <array>
#include <vector>
#include <map>
#include <stack>
#include <cmath>
#include <string>
#include <sstream>
#include <algorithm>
#include <assert.h>
#include <memory>
#include <array>
#include <set>
using namespace std;
#include "Core.h"
#include "Parser.h"
#include "Functions.h"
struct LispInterpreter {
Parser p;
void operator()(string s){
p.scanner(s);
}
bool next(){
try {
auto v = p.val();
p.scanner.warn();
print(eval(v));
} catch (string e) {
cout << e << endl;
}
return p.scanner.peek()->type != Token::END;
}
};
int main(int argc, char* argv[]){
init();
//read file then quit
stringstream ss;
ss << cin.rdbuf();
LispInterpreter li;
li(ss.str());
while (li.next());
//to read 1 line at a time
/*
Parser p;
while (true){
string line;
getline(cin,line);
try {
auto x = eval(p.parse(line));
print(x);
}
catch (string e){
cout << e << endl;
}
}
*/
string pause;
cin >> pause;
return 0;
}