3 个不稳定版本
0.2.0 | 2024 年 8 月 4 日 |
---|---|
0.1.1 | 2024 年 7 月 6 日 |
0.1.0 | 2024 年 7 月 6 日 |
#982 在 魔力豆
每月 147 次下载
用于 2 crates
445KB
11K SLoC
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,并在最后应用一些额外的优化。
依赖项
~18–31MB
~601K SLoC