3 个不稳定版本

0.2.0 2024 年 8 月 4 日
0.1.1 2024 年 7 月 6 日
0.1.0 2024 年 7 月 6 日

#36#chia

Download history 196/week @ 2024-07-01 34/week @ 2024-07-08 119/week @ 2024-07-29 37/week @ 2024-08-05 9/week @ 2024-08-12

每月 165 次下载
3 个 crate 中使用 (2 个直接使用)

Apache-2.0

9KB
84

Rue 语言

Rue 是一种类型编程语言,它被编译成 CLVM 字节码。它被设计为 Chialisp 的替代品,用于编写 Chia 区块链的链上代码。

这是一个非常实验性的编译器,目前不应该在生产环境中使用。不过,您可以尝试一下示例!

设置

首先,安装 Rust 并克隆此存储库。然后从存储库根目录中,运行以下命令来安装 CLI

cargo install --path crates/rue-cli

现在您可以运行示例,例如

rue hello_world.rue
rue factorial.rue

您目前无法向程序传递参数,但是您也可以使用 chia-dev-tools 运行

brun -x ff02ffff01ff018d48656c6c6f2c20776f726c6421ff0180 80

编译

使用一系列编译器遍历来构建最终的 CLVM 输出

源代码

目前,单个文件用作 Rue 程序的源代码。它被读取为 UTF-8 编码的字符串。

词法分析器

然后,源文本通过词法分析器被分割成标记。每个标记代表诸如标点符号、字符串、标识符和关键字等内容。这样做是为了提高性能并在解析器阶段增强错误信息。

解析器

手写的递归下降解析器负责实现语言的语法。您从整个程序开始自顶向下,然后例如解析一系列函数,其中每个函数都有一个参数列表,依此类推。最终,您会得到一个包含整个程序拆分为有意义的段的 Concrete Syntax Tree (CST)。

AST

CST 不是一个理想的编译器处理对象,因为它无类型并且包含编译器不关心的标记,如空白和关键字。因此,在这个阶段,CST 被转换成 Abstract Syntax Tree (AST),这是编译器和相邻工具中我们关心的语法部分的强类型表示。然而,您仍然可以在任何时间取一个 AST 节点来获取其底层的 CST 节点,例如用于错误报告。

HIR

AST 在几遍转换中转换为 HIR(高级中间表示)。首先,符号表被填充了函数声明。这允许您调用在您正在评估的代码之后定义的函数。接下来,函数本身被实际评估,将 AST 表达式转换为 HIR 节点。类型检查、名称解析和错误报告在这个阶段进行。

LIR

一旦构建了键入的HIR,它就会被翻译成一种更简单的形式,所有语言结构都简化为其CLVM对应项。这是低级中间表示。在此阶段应用优化,包括摇树(删除死代码)和表达式简化。

代码生成

最后,您可以通过一系列转换将LIR生成CLVM,并且在最后还可以应用一些额外的优化。

依赖关系

~17-30MB
~585K SLoC