2 个版本

0.2.1 2020 年 4 月 2 日
0.2.0 2015 年 12 月 27 日

#651编程语言

42 每月下载次数
用于 hohoho

MIT 许可证

750KB
817

brainfuck

Build Status

一个简单的 Rust 语言 Brainfuck 解释器。

文档

用法

此项目遵循一个非常标准的 Rust 设置。

cargo run   # Runs the executable.
cargo test  # Runs the tests.

lib.rs:

简单的 Rust 语言 Brainfuck 解释器。

Brainfuck 语言是为了创建一个非常简单的语言,这个语言非常容易编写解释器。这是一个这样的解释器。有关 Brainfuck 语言的更多信息,请从每个 语言指令的文档 开始,或 在线上的某些材料。Brainfuck 本身在语法上对人类来说很具挑战性,但实际上并不复杂。例如,+. 会增加第一个单元的值并输出该值。最让人困惑的指令是控制流结构 []。例如,+++>,<[>+.<-] 会打印出输入值后面的 3 个值。有关 Brainfuck 中的控制流,请参阅 控制流部分

示例

基本用法。

use brainfuck;

// Evaluate a simple brainfuck program from a string.
brainfuck::eval_string("+>.");
// Evaluate a brainfuck program from a file.
brainfuck::eval_file("fixtures/helloworld.rs");

高级用法,指定磁带类型。

use std::io;
use brainfuck::Interpreter;
use brainfuck::program::Program;
use brainfuck::tape::ArrayTape;

let mut stdin = io::stdin();
let mut stdout = io::stdout();
let program = Program::parse("++>+.").unwrap();
let mut interp = Interpreter::<ArrayTape>::new(program, &mut stdin, &mut stdout);

语义和可移植性

Brainfuck 语言有一些未定义的行为区域。Brainfuck 中所有未定义的行为如下

  1. 磁带的长度。
  2. 移动磁带指针超出磁带范围。
  3. 磁带值的类型。
  4. 增加或减少超出范围的值。
  5. 在无更多输入时尝试读取输入。
  6. 包含不匹配括号的程序。

对于 1-4,请参阅磁带的 文档。可以创建新的磁带来为这些点提供任意的语义。对于 5 和 6,忽略读取无更多输入值时的尝试。包含不匹配括号的程序是无效的。

依赖关系

~4MB
~83K SLoC