2 个稳定版本
1.0.1 | 2022年4月25日 |
---|
#442 in 编程语言
21KB
309 行
Brainfuck++
具有一些额外功能的 brainfuck 解释器和编译器。
关于 brainfuck
brainfuck 的理念是内存操作。基本上,你得到一个由 30,000 个 1 字节内存块组成的数组。数组的实际大小取决于编译器或解释器中使用的实现,但标准的 brainfuck 状态为 30,000。在这个数组中,你可以增加内存指针,增加内存指针指向的内存值等。让我先向你介绍我们可用的 10 个运算符。
符号 | 描述 |
---|---|
# |
此符号用于调试当前单元的值。 |
! |
将使用 ! 符号退出程序,退出代码为 2 |
> |
增加内存指针,或将指针向右移动 1 块。 |
< |
减少内存指针,或将指针向左移动 1 块。 |
+ |
增加内存指针指向的内存块的值 |
- |
减少内存指针指向的内存块的值 |
] |
类似于 C 的 while(cur_block_value != 0) 循环。 |
[ |
如果当前指向的内存块的值不为零,则跳回 [ |
, |
类似于 C 的 getchar() 。输入 1 个字符。 |
. |
类似于 C 的 putchar() 。将 1 个字符打印到控制台 |
一些规则
-
编译器或解释器应忽略上述 10 个符号以外的任何任意字符。除了 10 个运算符之外的字符应视为注释。
-
程序开始时,“数组”上的所有内存块都设置为 0。并且内存指针最初位于最左侧的内存块上。
-
可以嵌套任意次数的循环。但所有
[
必须有一个相应的]
。
安装
要安装它,只需将以下行添加到您的 Cargo.toml
brainfuck-plusplus = "0.1.3"
您还可以通过执行以下操作安装 CLI
$ cargo install brainfuck-plusplus
$ brainfuck -V # Check the version for brainfuck.
用法
人类需要以某种方式学习。此解释器包含两部分,一个是 CLI,另一个是您可以用来解释 brainfuck 代码的模块。
CLI
$ brainfuck [OPTIONS] [FILE]
要添加冗余信息,请将 -v
添加到 [OPTIONS]
,如果您想添加更多级别,请添加 -vv
或 -vvv
以及更多...
要查看帮助菜单,请在命令行中输入以下内容。
$ brainfuck --help
模块
您需要导入这个仓库和一个名为 brainfuck
的函数,它将导入一个参数作为 String
,这将是 brainfuck 的源代码,第二个参数是 i32
,它是调试的级别。
use brainfuck::*;
fn main() {
let bf_config = BFConfig {
..default_bf_config()
};
brainfuck("+++++++>++>-.", config);
}
您还可以获取函数的返回值,得到使用的单元格数量。
let cells: [u8, 3000] = brainfuck(...);
配置
use brainfuck::*;
...
let bf_config = BFConfig {
debug: 0,
..default_bf_config() // support for default values
};
这是配置结构的定义。
pub struct BFConfig {
// The level of verbosity (default to 0)
pub(crate) debug: i32,
}
示例
这是一个 brainfuck 的 hello world 示例。
>++++++++[<+++++++++>-]<.>++++[<+++++++>-]<+.+++++++..+++.>>++++++[<+++++++>-]<+
+.------------.>++++++[<+++++++++>-]<+.<.+++.------.--------.>>>++++[<++++++++>-
]<+.
想法
Brainfuck 是一个非常小的语言,可以供初学者编写他们的第一个图灵完备编程语言。由于它非常简单,因此总有新的方法使其更有趣。
以下是一些想法
- 创建一个 REPL
- 编译成其他语言
- 更多语言扩展
#
用于单元格调试 :tick!
用于程序退出 :tick^
用于导入其他文件{}
如果语句(用于检查单元格是否相同)。
许可
此项目受 MIT 许可证的保护
依赖
~3MB
~53K SLoC