ProcessingでBrainfuckインタプリタ(ver 0.1)

30分くらいかかってようやくHello, world!をコンソールに出力するところまでこぎつける。

できてないもの。

  • 入力命令 , の実装。
  • ブラケット(カギカッコ)の対応関係を調べる。
  • 境界エラーの検出。
  • メモリとポインタの視覚化。

正直BFでプログラミングする予定なんてないので視覚化だけ考えればいい気がが。

byte buffer[] = new byte[100];
int ptr = 0;
int bfpos = 0;
String input = "+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.------------.<++++++++.--------.+++.------.--------.>+.";

void setup(){
}

void draw(){
  bfInterpreter(input, bfpos);
  bfpos++;
  if(input.length()-1 < bfpos){
    noLoop();
  }
}

void jumpToR(){
  if(buffer[ptr] != 0) return;
  while(input.charAt(bfpos) != ']'){
    bfpos++;
  }
}

void jumpToL(){
  if(buffer[ptr] == 0) return;
  while(input.charAt(bfpos) != '['){
    bfpos--;
  }
}

void bfInterpreter(String input, int pos){
  char c = input.charAt(pos);
  switch(c){
    case '>': ptr++; break;
    case '<': ptr--; break;
    case '+': buffer[ptr]++; break;
    case '-': buffer[ptr]--; break;
    case '.': print((char)buffer[ptr]); break;
    case '[': jumpToR(); break;
    case ']': jumpToL(); break;
  }
}

追記:
jumpToじゃ[ ]が入れ子になってる時対応できないことに気づく…だめだめ。