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中使用

MIT许可证

715KB
17K SLoC

中间表示(IR)

此crate包含AirScript的中间表示,AirIR

AirIR的目的是提供一个简单且精确的表示,允许对AIR进行优化并将其转换为各种目标语言的约束评估器代码。

生成AirIR

使用new方法从AirScript AST(AirScript解析器的输出)生成AirIR。如果在处理AST时遇到任何错误,new方法将返回一个包含新AirIRError或类型为SemanticErrorError

new方法将首先遍历包含声明的源部分,构建一个包含常量、跟踪列、公共输入、周期性列和随机值的符号表。如果遇到重复、不正确或缺少的声明,将返回一个SemanticError。一旦构建了符号表,就会处理AST的boundary_constraintsintegrity_constraints部分中的约束和中间变量。最后,new返回一个包含AirIRSemanticError的结果。

示例用法

// 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定义。
  • 段宽度:表示包含每个跟踪段宽度的向量(目前为mainauxiliary)。
  • 常量:表示将标识符映射到常量值的向量。
  • 公共输入:表示将标识符映射到每个声明的公共输入的大小(目前,公共输入只能声明为固定大小的数组)。
  • 周期性列,用一个有序向量表示,该向量包含每个周期性列的重复模式(作为一个向量)。
  • 约束条件,表示为
    • 一个无重复节点的有向无环图(DAG)。
    • 每个跟踪段(例如主或辅助)的 ConstraintRoot 向量,其中 ConstraintRoot 包含每个约束开始的图中的节点索引以及约束域,该域指定每个约束访问的行。
    • 包含边界和完整性约束。

依赖关系

~7–16MB
~195K SLoC