为2B写一个口译员
我喜欢大卫·卡特(David Catt)的深奥语言2B,将内存存储在磁带中,其中每个单元是一个单独的字节带(“子带”)。为此写一个翻译!
语言规范
官方规格可以在这里找到。在本说明书中,"
表示范围内的数字0-9
(0
解释为10
),_
表示任意长度的字符串。每个像元都存储一个在range范围内的值0-255
,上溢/下溢会像BF一样回绕。(感谢@MartinBüttner)。要将文本转换为数字0-255
,请使用ASCII码。因为我找不到详细信息,所以我要说磁带长度应该255
最小,但是如果您另外知道,请进行编辑。
+-------------+----------------------------------------------------------------------------------------------------------------------------------------+
| Instruction | Description |
+-------------+----------------------------------------------------------------------------------------------------------------------------------------+
| 0 | Zeroes the current cell and clears the overflow/underflow flag. |
| { | If the current cell is zero, jump to the matching }. |
| } | A placeholder for the { instruction. |
| ( | Read a byte from the input stream and place it in the current cell. |
| ) | Write the value of the current cell to the console. |
| x | Store the value of the current cell in a temporary register. |
| o | Write the value of the temporary register to the console. |
| ! | If the last addition overflowed, add one to the current cell. If the last subtraction underflowed, subtract one from the current cell. |
| ? | Performs a binary NOT on the current cell. |
| +" | Adds an amount to the current cell. |
| -" | Subtracts an amount from the current cell. |
| ^" | Moves the subtape up a number of times. |
| V" | Moves the subtape down a number of times. |
| <" | Moves the tape left a number of times. |
| >" | Moves the tape right a number of times. |
| :_: | Defines a label of name _. |
| *_* | Jumps to a label of name _. |
| ~_~ | Defines a function of name _. |
| @_@ | Calls a function of name _. |
| % | Ends a function definition. |
| #_# | Is a comment. |
| [SPACE] | Is an NOP. |
| [NEWLINE] | Is treated as whitespace and removed. |
| [TAB] | Is treated as whitespace and removed. |
+-------------+----------------------------------------------------------------------------------------------------------------------------------------+
测验
+0+0+0+0+0+0+0+2)+0+0+9)+7))+3)-0-0-0-0-0-0-0-9)+0+0+0+0+0+0+0+0+7)-8)+3)-6)-8)-7-0-0-0-0-0-0)
应该输出 Hello world!
+1:i:{()*i*}
某种cat
程序,只是没有换行符。
+1:loop:{@ReadChar@*loop*}@PrintHello@@WriteAll@(~ReadChar~(x-0-3<2o^1>1+1>1%~PrintHello~+0+0+0+0+0+0+0+2)-1+0+0+0)+7))+3)+1-0-0-0-0-0-0-0-0)%~WriteAll~<1x:reverse:{<1v1>1-1*reverse*}o-1:print:{-1<1)^1>1*print*}%
首先应接受一个名称,然后按Return,应输出Hello name
(此处是输入的名称)。
该计划的功劳归功于David Catt。
我正在制定完整的测试程序。
规则
- 禁止出现标准漏洞
- 您的口译员必须符合所有规范,但注释除外,这不是必需的。
计分
- 这是代码高尔夫球,因此最少的字节获胜!
- -10字节(如果您的口译员处理注释)。
排行榜
这是一个堆栈片段,用于按语言生成常规排行榜和获胜者概述。
为了确保您的答案显示出来,请使用以下Markdown模板以标题开头。
# Language Name, N bytes
N
您提交的文件大小在哪里。如果您提高了分数,可以将旧分数保留在标题中,方法是将它们打掉。例如:
# Ruby, <s>104</s> <s>101</s> 96 bytes