#解释器 #为什么 #ski #真正为什么

unlambda

一个unlambda解析器和解释器crate

1 个不稳定版本

0.1.0 2020年8月16日

#312 in FFI

CC0 许可证

25KB
620

unlambda

Build Status Docs Latest Version

这是一个Rust unlambda解释器,您可以将其用作库。代码大部分还可以,(我完全是指它运行正常,没有内存泄漏(据我所知)且API不会让我感到厌恶)。但是,它的文档比我想提供的要少得多。

无论如何,这在我心血来潮的时候写的。我本来打算写一个rust unlambda二进制文件,也许我会做到这一点,但这个项目如果放在我的~/code文件夹里,对任何人都没有好处。我正在尝试将90%以上的项目上传到crates.io,如果它们至少有点用处,那么我们就到这里。

无论如何,它的边缘有点粗糙(有些事情我现在不会做),暴露了比您预期的更多内部结构,而对于超出基本功能的文档几乎不存在。

尽管如此,API的重要部分都在顶层暴露,尽管几乎所有内容都是pub。我的意思是,如果您想编写一个评估unlambda的程序,并且不想自己编写解释器,那么我真的没有必要保留可能会妨碍您的任何东西?我不知道。由于unlambda基本上是一个固定格式并且不会更新,因此除非是修复错误,否则这可能是最终的。

示例

let source = "`.!`.d`.l`.r`.o`.w`. `.,`.o`.l`.l`.e`.Hi";
// `unlambda::Input` is the "stdin", which can be a string,
// a file, actual stdin, ... It defaults to the empty string.
let input = unlambda::Input::default();
// Produces an error if we fail to parse, or if the
// unlambda program does some IO which itself produces an error.
let output = unlambda::eval_to_string(source, input)?;
assert_eq!(output, "Hello, world!");

许可证

此代码为公有领域,如[./LICENSE-CC0]所述。

值得注意的是,Unlambda分发本身是在GPL下分发的,但我相信我没有做任何会让这适用于此代码的事情。

依赖关系