010
27.02.2007, 16:55 Uhr
0xdeadbeef
Gott (Operator)
|
Mmmh. Das ist richtig...naja. Setz ich mich bei Gelegenheit vielleicht mal ran. Wie gesagt, das ist alter Code, kann gut sein, dass ich den damals nicht zuende geschrieben habe.
Update:
C++: |
#include <iostream> #include <iterator> #include <string>
class bf_interpreter { public: bf_interpreter(std::string const &s) : code(s), i(0) { }
void start() { ip(code); }
private: int i; char arr[30000]; std::string code;
void ip(std::string const &part) { std::string part_of_part;
for(std::string::const_iterator itr = part.begin(); itr != part.end(); ++itr) { switch(*itr) { case '>': ++i; break; case '<': --i; break; case '+': ++arr[i]; break; case '-': --arr[i]; break; case '.': std::cout.put(arr[i]); break; case ',': arr[i] = std::cin.get(); break; case '[': { unsigned bc = 1; while(true) { ++itr; if ( itr == part.end()) { throw itr; } else if(*itr == '[') { ++bc; } else if(*itr == ']') { --bc; if(bc == 0) break; } part_of_part += *itr; }
while(arr[i]) ip(part_of_part); break; } } } } };
int main() { std::string s(std::istream_iterator<char>(std::cin), std::istream_iterator<char>()); bf_interpreter bf(s);
bf.start(); }
|
So sollte das gehen. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 27.02.2007 um 17:03 Uhr von 0xdeadbeef editiert. |