#dsl #intended #math #pink #definition #repl #replecement

bin+lib pink-runtime

一个非常简单的基于替换的 DSL,旨在用于数学。

2 个版本

0.1.1 2023 年 2 月 19 日
0.1.0 2023 年 2 月 10 日

#983 in 文本处理

GPL-3.0+

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;

表达式从上到下匹配。因此,虽然 pq 通常可以绑定到 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