#brainfuck-compiler #memory #mini #super

bin+lib mini-brainfuck

一个超级小的 brainfuck 解释器和编译器

7 个版本 (2 个稳定版)

1.0.1 2022 年 1 月 29 日
0.1.4 2022 年 1 月 29 日

#338编程语言

每月 22 次下载

MIT 许可证

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