3个不稳定版本
0.2.0 | 2024年8月4日 |
---|---|
0.1.1 | 2024年7月6日 |
0.1.0 | 2024年7月6日 |
#927 in 魔力豆
162 次每月下载
340KB
8K 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被转换成抽象语法树(AST),它是编译器及其相邻工具中我们关心的语法所有部分的强类型表示。但是,您仍然可以在任何时候取一个AST节点并获取其底层的CST节点,用于错误报告等。
HIR
抽象语法树(AST)通过几步转换变为高级中间表示(HIR)。首先,符号表被填充了函数声明,这允许你调用在评估代码之后定义的函数。接下来,函数自身被评估,将AST表达式转换为HIR节点。类型检查、命名解析和错误报告在这个过程中完成。
LIR
一旦构建了带类型的HIR,它就被翻译成一种更简单的形式,所有语言构造都被简化为其CLVM对应物。这是低级中间表示。在这个阶段应用优化,包括摇树优化(删除死代码)和表达式简化。
代码生成
最后,你可以通过一系列转换将LIR生成CLVM,并在最后应用一些额外的优化。
依赖关系
~23–38MB
~717K SLoC