遇到EOF时,befunge-98中~
指令的预期行为是什么?
直观地说,它应该在堆栈上放置-1,但我在这方面发现了一些变化:
-1 -1 97
")10 10 97
")以下是测试:
echo "a" | funge test.fg
test.fg如下(读取三个字符并输出其代码):
~~~...@
实际上是否有正确处理EOF的解释器(即与LF不同)仍然支持完整的befunge-98规范?
答案 0 :(得分: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上。之后,代码会在两个~
指令之间进行循环。
您的代码可以修改以检查符合~
- 符合EOF的行为,例如:像这样:
~~#v~...a"tcelfer ton did">:#,_@
>..a"detcelfer">:#,_@