私はCでbrainfuckインタープリターを書いています.
ブラケット ( []
) ループが正しく機能していないようです。
編集:このコードは現在機能しています
これは、ブラケット ループを制御するコードです。
case '[': // start bracket loop
if(!*(cells + i))
{
bracket++;
while(bracket)
{
n++;
if(bf[n] == ']')
bracket--;
else if(bf[n] == '[')
bracket++;
}
}
break;
case ']': // end bracket loop
if(*(cells + i))
{
bracket++;
while(bracket)
{
n--;
if(bf[n] == '[')
bracket--;
else if(bf[n] == ']')
bracket++;
}
}
break;
プログラムは、bf コードを含む文字列から読み取っています。文字ごとに、switch ステートメントの適切なセクション (各コマンドのケースを含む) が呼び出されます。
']' コマンドが呼び出されると、プログラムはしませんループの先頭に戻ります。
助けてくれてありがとう!
編集:以下に指摘されているいくつかのバグを修正した後、実際の問題であることが明らかになったものを示すために更新しました。Ubuntu 14.04 で gdb デバッガーを使用しています。
編集(再度):プログラムは現在機能しており、以下で利用できます。
編集(再び(再び)):以下のコメントで述べたように、最終的にはさまざまなバグが問題を引き起こしたため、自分の質問に答える単一の答えがありませんでした. 誰かが興味を持っている場合に、ブラケット ループを処理する 1 つの方法の例として、これを残しました。
コード全体は、 https://github.com/underscorejho/bfiの GitHub で表示できます。