8 个版本
使用旧的 Rust 2015
0.3.0 | 2019年10月23日 |
---|---|
0.2.5 | 2019年10月22日 |
0.1.4 | 2019年10月19日 |
在 编程语言 中排名第 403
用于 ashpaper-bin
23KB
548 行
AshPaper
AshPaper 是由 William Hicks 构思的 Esopo 语言的解释器。您可以在 William Hicks 的个人网站上了解它和 Esopo 项目 这里。Daniel Temkin 也在 esoteric.codes 上对此进行了介绍,您可以在这里阅读 这里。当然,还有规范!您可以在这里查看 这里。
工作原理
诗歌是你的程序。
你有两个寄存器可供使用,r0 和 r1,用于存储有符号整数(类型为 i64
)。你还有一个堆栈,可以存储有符号整数(边界仅限于 Vec<i64>
)。
以下是你可以使用的指令(按照优先级顺序排列)
- 与上一行押韵:未实现。
- 行包含
/
:如果活动寄存器中的值大于该行的音节数,则转到与活动寄存器中 非活动 寄存器值对应的行号。如果 abs(n) <= lines,则 n,否则 n % lines。 - 单词中包含大写字母:取活动寄存器的相反数。
- 单词开头有大写字母:将寄存器相乘并将结果存储在活动寄存器中。
- 行包含单词 'like' 或 'as':将寄存器相加并将结果存储在活动寄存器中。
- 行包含
?
:打印与活动寄存器值关联的 ASCII 字符。如果 abs(n) <= u8::MAX n,否则 n % u8::MAX。 - 行包含
.
:打印活动寄存器的整数值。 - 行包含
,
:从堆栈中弹出并存储在活动寄存器中。 - 行包含
-
:将活动寄存器的值推送到堆栈中。 - 连续单词的变化:未实现。
- 空白行:无操作。
- 其他所有内容:将行的音节数存储到活动寄存器中。
让我们以名为 lovely-poem.eso
的文件中的这首诗为例。这首诗程序(诗程?)计算阶乘以及标题中的音节数。(我从阅读威廉·希克斯的《其他木工》这首诗中学到了很多东西)
lovely poem
it is a calculator, like a
poem, is a poem, and finds
factori-
als
The input is the syllAbles
in the title, count them, as one counts
(q) what other poem, programs can be writ
(a) anything a Turing
machine-machine-machine
would do
re/cur
sion works too, in poems, programs, and this
a lovely.
poem or a calculator or nothing
how lovely can it be?
使用这个库,你可以用如下类似的程序来运行它
extern crate ashpaper;
use std::fs;
pub fn main() {
let fname = "lovely-poem.eso";
let contents = fs::read_to_string(fname).expect("Something went wrong reading input file!");
match ashpaper::program::execute(&contents) {
Ok(res) => print!("{}", res),
Err(e) => eprintln!("{}", e),
}
}
它将产生以下字符串
24
当 RUST_LOG=info
被设置,并且调用者初始化日志记录时,你可以获取程序评估信息。以下是 lovely-poem.eso
的样子。
instruction | r0 | r1 | stack
--------------------------------------------------- | ---- | ---- | -------
lovely poem | 4 | 0 | []
| 4 | 0 | []
it is a calculator, like a | 4 | 4 | []
poem, is a poem, and finds | 4 | 4 | []
factori- | 4 | 4 | [4]
als | 4 | 1 | [4]
The input is the syllAbles | 4 | -1 | [4]
in the title, count them, as one counts | 3 | -1 | [4]
(q) what other poem, programs can be writ | 3 | 4 | []
(a) anything a Turing | 3 | 12 | []
machine-machine-machine | 3 | 12 | [12]
would do | 3 | 2 | [12]
it is a calculator, like a | 3 | 5 | [12]
poem, is a poem, and finds | 3 | 12 | []
factori- | 3 | 12 | [12]
als | 3 | 1 | [12]
The input is the syllAbles | 3 | -1 | [12]
in the title, count them, as one counts | 2 | -1 | [12]
(q) what other poem, programs can be writ | 2 | 12 | []
(a) anything a Turing | 2 | 24 | []
machine-machine-machine | 2 | 24 | [24]
would do | 2 | 2 | [24]
re/cur | 2 | 2 | [24]
sion works too, in poems, programs, and this | 2 | 24 | []
a lovely. | 2 | 24 | []
poem or a calculator or nothing | 10 | 24 | []
how lovely can it be? | 10 | 24 | []
关于与非正式规范的兼容性的一些注意事项
- 目前,我的实现可能无意中偏离了规范。如果你发现了类似的问题,请提出问题 ❤️ ❤️
- 全韵和押韵规则尚未实现。
依赖项
~2.2–3MB
~60K SLoC