2 个版本
0.1.1 | 2024 年 7 月 6 日 |
---|---|
0.1.0 | 2024 年 7 月 6 日 |
#2564 in 魔法豆
113 次每月下载
在 4 个 crate 中使用 (通过 rue-parser)
22KB
570 行
Rue 语言
Rue 是一种类型化编程语言,它被编译为 CLVM 字节码。它旨在作为 Chialisp 的替代品,用于编写 奇亚区块链 上的链上代码。
这是一个非常实验性的编译器,目前不应在生产环境中使用。尽管如此,您仍然可以尝试示例!
设置
首先,安装 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 编码的字符串。
词法分析器
源文本随后由词法分析器分割成标记。每个标记表示诸如标点、字符串、标识符和关键字等事物。这样做是为了提高性能并在解析阶段增强错误消息。
解析器
手写的递归下降解析器负责实现语言的语法。您从整个程序开始,然后例如解析一系列函数,其中每个函数都有一个参数列表,依此类推。最终,您将获得一个包含您整个程序有意义段落的抽象语法树 (CST)。
AST
CST 不适合由编译器处理,因为它无类型且包含编译器不关心的标记,例如空白和关键字。因此,在这个阶段,CST 转换为抽象语法树 (AST),它是编译器及其相邻工具关心的语法所有部分的强类型表示。但是,您仍然可以在任何时候取一个 AST 节点并获取其底层 CST 节点,例如用于错误报告。
HIR
AST(抽象语法树)在几轮转换中被转换成HIR(高级中间表示)。首先,符号表被填充了函数声明。这允许你调用在评估代码之后定义的函数。接下来,函数本身被实际评估,将AST表达式转换为HIR节点。在这一阶段进行类型检查、名称解析和错误报告。
LIR
一旦构建了带类型的HIR,它就被翻译成更简单的形式,所有语言结构都被简化为它们的CLVM对应物。这是低级中间表示。在这一阶段应用优化,包括摇树(移除死代码)和表达式简化。
代码生成
最后,你可以通过一系列转换从LIR生成CLVM,并且在最后还可以应用一些额外的优化。