7 个版本 (2 个稳定版)
1.0.1 | 2022 年 1 月 29 日 |
---|---|
0.1.4 | 2022 年 1 月 29 日 |
#338 在 编程语言 中
每月 22 次下载
21KB
320 行
Mini Brainfuck
一个超级小的 brainfuck 解释器和编译器。
关于 brainfuck
brainfuck 的理念是内存操作。基本上,你有一个由 30,000 个 1 字节内存块组成的数组。数组大小实际上取决于编译器或解释器中使用的实现,但标准的 brainfuck 状态是 30,000。在这个数组中,你可以增加内存指针,增加内存指针处的值等。让我先向你展示我们可用的 8 个运算符。
> = increases memory pointer, or moves the pointer to the right 1 block.
< = decreases memory pointer, or moves the pointer to the left 1 block.
+ = increases value stored at the block pointed to by the memory pointer
- = decreases value stored at the block pointed to by the memory pointer
[ = like c while(cur_block_value != 0) loop.
] = if block currently pointed to's value is not zero, jump back to [
, = like c getchar(). input 1 character.
. = like c putchar(). print 1 character to the console
额外字符
符号 | 激活参数 | 描述 |
---|---|---|
# |
-v 或 -vv 或 -vvv |
此符号用于调试当前单元格的值。 |
! |
--exit 或 -e |
使用 ! 符号将退出程序,退出代码为 2 |
一些规则
-
编译器或解释器应忽略上述 8 个字符之外的任何任意字符。除了 8 个运算符之外的字符应视为注释。
-
程序开始时,"数组" 上的所有内存块都设置为 0。内存指针最初位于最左侧的内存块。
-
可以嵌套任意数量的循环。但所有 [ 都必须有一个相应的 ]。
安装
要安装它,只需将以下行添加到您的 Cargo.toml
mini-brainfuck = "0.1.3"
您也可以通过执行以下操作来安装 CLI
$ cargo install mini-brainfuck
$ brainfuck -V # Check the version for brainfuck.
用法
人类需要以某种方式学习。这个解释器有两个部分,一个是 CLI,您可以使用它来解释 brainfuck 代码的模块。
CLI
$ brainfuck [OPTIONS] [FILE]
要添加详细程度,将 -v
添加到 [OPTIONS]
中,如果您想添加更多级别,请添加 -vv
或 -vvv
等...
要查看帮助菜单,请在命令行中输入以下内容。
$ brainfuck --help
模块
您需要导入 crate,并将名为 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,
exit_support: false,
..default_bf_config() // support for default values
};
这是配置结构的定义。
pub struct BFConfig {
// The level of verbosity (default to 0)
pub(crate) debug: i32,
// Add support for the `!` symbol.
pub(crate) exit_support: bool,
}
示例
这是一个Brainfuck中的hello world示例。
>++++++++[<+++++++++>-]<.>++++[<+++++++>-]<+.+++++++..+++.>>++++++[<+++++++>-]<+
+.------------.>++++++[<+++++++++>-]<+.<.+++.------.--------.>>>++++[<++++++++>-
]<+.
想法
Brainfuck是一种非常小巧的语言,适合初学者编写他们的第一个图灵完备编程语言。由于其简单性,总有新的方法使它更有趣。
以下是一些想法
- 创建一个REPL
- 编译到其他语言
- 更多语言扩展
#
用于单元调试 :tick!
用于程序退出 :tick^
用于导入其他文件{}
if语句(用于检查单元是否相同)。
许可证
本项目受MIT许可证的许可。
依赖
~3MB
~53K SLoC