brainfuck编译器

随便写的qwq
严格的说应该是翻译器233
改改就可以成解释器

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
75
76
77
78

#include <vector>
#include <deque>
#include <stack>
#include <iostream>
using namespace std;

deque<char>::iterator pt;
deque<char> cp;
vector<char> inf;
vector<char>::iterator it;
stack<vector<char>::iterator> stk;

int () {
int cnt=0;
for(it=inf.begin();it!=inf.end();it++) {
if(*it=='[') cnt++;
if(*it==']') cnt--;
}
if(cnt) return 1;
return 0;
}

int main() {
freopen("a.in","r",stdin);

char a;
cp.push_back(0);
pt=cp.begin();

while((a=getchar())!=EOF) inf.push_back(a);

if(chk()) { cout<<"Error"<<endl;return 0; }

it=inf.begin();
while(it!=inf.end()) {
switch(*it) {
case '>':
if(++pt == cp.end()) cp.push_back(0);
break;
case '<':
if(pt == cp.begin()) cp.push_front(0);
pt--;
break;
case '+':
(*pt)++;
break;
case '-':
(*pt)--;
break;
case '.':

putchar(*pt);
break;
case ',':
++it,(*pt)=(*it);
break;
case '[':
if(*pt) stk.push(it);
else {
int cnt=1;
for(it++;;it++) {
if(*it=='[') cnt++;
if(*it==']') cnt--;
if(!cnt) break;
}
} break;
case ']':
it=stk.top(),it--,stk.pop();
break;
default: if(*it!='n' && *it!='t' && *it!=' ') {
cout<<"Error!"<<endl;return 1; } break;
}
// cout<<(*it)<<" "<<(int)(*pt)<<endl;
it++;
}
return 0;
}