
随便写的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; }
it++; } return 0; }
|
近期评论