0

EOF が発生した場合、 befunge-98~の命令の予想される動作は何ですか?

直観的には、スタックに -1 を配置する必要がありますが、この点でいくつかのバリエーションを発見しました。

テストは次のとおりです。

echo "a" | funge test.fg

次のように test.fg を使用します (3 つの文字を読み取り、それらのコードを出力します)。

~~~...@

EOF を正しく (つまり、LF とは異なる) 処理し、完全な befunge-98 仕様をサポートするインタープリターは実際にありますか?

4

1 に答える 1

2

CCBI は仕様に従っています。

ファイルの終わりまたはその他のファイル エラー状態の場合、& と ~ は両方とも r のように動作します。

組み込みのトレーサー/デバッガーを使用して確認できるように:

$ echo "~~~...@" > test.fg
$ echo "a" > input
$ ccbi --trace test.fg

Instruction: 126 0x7e '~'
Position: (0,0) -- Delta: (1,0) -- Offset: (0,0)
Stack: 0 cell(s): [  -   -   -   -   -   -   -   -] ""
Tick: 0 -- IPs: 1 -- Index/ID: 0/0 -- Stacks: 1 -- Mode:

(Tracer) stdin < input
Successfully set stdin to file 'input'.
(Tracer) s

Instruction: 126 0x7e '~'
Position: (1,0) -- Delta: (1,0) -- Offset: (0,0)
Stack: 1 cell(s): [  -   -   -   -   -   -   -  97] "a"
Tick: 1 -- IPs: 1 -- Index/ID: 0/0 -- Stacks: 1 -- Mode:

(Tracer) s

Instruction: 126 0x7e '~'
Position: (2,0) -- Delta: (1,0) -- Offset: (0,0)
Stack: 2 cell(s): [  -   -   -   -   -   -  97  10] "a^J"
Tick: 2 -- IPs: 1 -- Index/ID: 0/0 -- Stacks: 1 -- Mode:

(Tracer) s

Instruction: 126 0x7e '~'
Position: (1,0) -- Delta: (-1,0) -- Offset: (0,0)
Stack: 2 cell(s): [  -   -   -   -   -   -  97  10] "a^J"
Tick: 3 -- IPs: 1 -- Index/ID: 0/0 -- Stacks: 1 -- Mode:

(Tracer) s

Instruction: 126 0x7e '~'
Position: (2,0) -- Delta: (1,0) -- Offset: (0,0)
Stack: 2 cell(s): [  -   -   -   -   -   -  97  10] "a^J"
Tick: 4 -- IPs: 1 -- Index/ID: 0/0 -- Stacks: 1 -- Mode:

(Tracer) s

Instruction: 126 0x7e '~'
Position: (1,0) -- Delta: (-1,0) -- Offset: (0,0)
Stack: 2 cell(s): [  -   -   -   -   -   -  97  10] "a^J"
Tick: 5 -- IPs: 1 -- Index/ID: 0/0 -- Stacks: 1 -- Mode:

(Tracer) s

Instruction: 126 0x7e '~'
Position: (2,0) -- Delta: (1,0) -- Offset: (0,0)
Stack: 2 cell(s): [  -   -   -   -   -   -  97  10] "a^J"
Tick: 6 -- IPs: 1 -- Index/ID: 0/0 -- Stacks: 1 -- Mode:

ティック 3 で、デルタは から(1,0)に変更されました(-1,0)。つまり、~列 3 (位置(2,0)) の命令は、予想どおり EOF に反映されました。その後、コードは 2 つの~命令の間でループします。

~次のように、適合する-on-EOF 動作をチェックするようにコードを修正できます。

~~#v~...a"tcelfer ton did">:#,_@
   >..a"detcelfer">:#,_@
于 2014-04-07T04:26:23.013 に答える