2 个版本
0.2.1 | 2020 年 4 月 2 日 |
---|---|
0.2.0 | 2015 年 12 月 27 日 |
#651 在 编程语言
42 每月下载次数
用于 hohoho
750KB
817 行
brainfuck
一个简单的 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-4,请参阅磁带的 文档。可以创建新的磁带来为这些点提供任意的语义。对于 5 和 6,忽略读取无更多输入值时的尝试。包含不匹配括号的程序是无效的。
依赖关系
~4MB
~83K SLoC