3个版本 (破坏性)
0.3.0 | 2023年7月12日 |
---|---|
0.2.0 | 2023年2月23日 |
0.1.0 | 2022年11月10日 |
#6 in #air
每月21次下载
在3 crates中使用
715KB
17K SLoC
中间表示(IR)
此crate包含AirScript的中间表示,AirIR
。
AirIR
的目的是提供一个简单且精确的表示,允许对AIR进行优化并将其转换为各种目标语言的约束评估器代码。
生成AirIR
使用new
方法从AirScript AST(AirScript解析器的输出)生成AirIR
。如果在处理AST时遇到任何错误,new
方法将返回一个包含新AirIR
的Error
或类型为SemanticError
的Error
。
new
方法将首先遍历包含声明的源部分,构建一个包含常量、跟踪列、公共输入、周期性列和随机值的符号表。如果遇到重复、不正确或缺少的声明,将返回一个SemanticError
。一旦构建了符号表,就会处理AST的boundary_constraints
和integrity_constraints
部分中的约束和中间变量。最后,new
返回一个包含AirIR
或SemanticError
的结果。
示例用法
// parse the source string to a Result containing the AST or an Error
let ast = parse(source.as_str()).expect("Parsing failed");
// process the AST to get a Result containing the AirIR or an Error
let ir = AirIR::new(&ast)
AirIR
尽管生成AirIR
在处理源AST时使用符号表,但其内部表示仅由以下内容组成
- 名称:由
AirIR
表示的AIR定义。 - 段宽度:表示包含每个跟踪段宽度的向量(目前为
main
和auxiliary
)。 - 常量:表示将标识符映射到常量值的向量。
- 公共输入:表示将标识符映射到每个声明的公共输入的大小(目前,公共输入只能声明为固定大小的数组)。
- 周期性列,用一个有序向量表示,该向量包含每个周期性列的重复模式(作为一个向量)。
- 约束条件,表示为
- 一个无重复节点的有向无环图(DAG)。
- 每个跟踪段(例如主或辅助)的
ConstraintRoot
向量,其中ConstraintRoot
包含每个约束开始的图中的节点索引以及约束域,该域指定每个约束访问的行。 - 包含边界和完整性约束。
依赖关系
~7–16MB
~195K SLoC