2 个版本
0.1.1 | 2023 年 2 月 19 日 |
---|---|
0.1.0 | 2023 年 2 月 10 日 |
#983 in 文本处理
50KB
1K SLoC
pink
一个非常简单的基于替换的 DSL,旨在用于数学。
警告:这仍然处于非常早期的阶段。不要期望任何东西。
开始使用
要作为二进制安装 pink,如果您有 cargo,只需这样做
cargo install pink-runtime
然后,要运行程序,您可以运行
pink-runtime [PATH]
要查看更多信息,您可以这样做
pink-runtime --help
要作为库使用 pink,您可以将其添加为任何其他 crates.io 依赖项(尽管我建议将其用作 git 依赖项)。
文档
头
每个文件对应一个结构。在每个文件的顶部,您必须声明其域、一组保留关键字及其依赖项。
domain { true, false }
reserve { in } # Commas, curly braces and parenthesis are reserved by the runtime itself
use { }
定义
在头部之后,您可以有一系列定义。一个定义可能包含域的具体元素或保留关键字的字面量。其他任何东西都视为变量(实际上,任何东西,包括数学符号)。
true and true => true;
p and q => false;
表达式从上到下匹配。因此,虽然 p
和 q
通常可以绑定到 true
,但鉴于这里定义的顺序,我们永远也不会达到那个情况。
扩展变量
如果一个变量以 ...
结尾,那么它可以捕获任意数量的项(但至少 1 项(这可能会改变))。
x in { } => false;
x in { x } => true;
x in { y } => false;
x in { x, rest... } => true;
x in { y, rest... } => x in { rest... };
匹配
运行时匹配每个可能的子表达式,并找到最终具有最少标记的结果。
REPL
在 REPL 中,您可以评估表达式。目前,表达式只有元素和字面量(没有变量)。
>> false in { false }
true
依赖项
~9–20MB
~276K SLoC