1 unstable release

Uses new Rust 2021

0.1.0 Nov 10, 2022

#982 in Cryptography

Download history 24/week @ 2022-11-08 20/week @ 2022-11-15 8/week @ 2022-11-22

52 downloads per month
Used in 3 crates (2 directly)

MIT license

58KB
1.5K SLoC

Parser

This crate contains the parser for AirScript.

The purpose of the parser is to parse the constraints written in the human-friendly AirScript language into an Abstract Syntax Tree.

Generating the Abstract Syntax Tree (AST)

The parser uses Logos to generate a custom lexer, which is then fed into the parser generated by LALRPOP.

To create an AST from a given AirScript module, pass your source to the public parse function, which will return the AST or an Error of type ScanError or ParseError.

The parse function will first tokenize the source using the lexer, then map the resulting tokens to new tokens accepted by the parser, which are of type (usize, Token, usize). Each invalid token will be stored as ScanError. Finally, if no ScanError occurred, parse feeds the tokens to the parser to generate a Result with the corresponding AST (or ParseError).

Example usage:

// parse the source string to a Result containing the AST or an Error
let ast = parse(source.as_str());

AST

The AirScript AST (Source) contains a vector of SourceSection, each of which contains the result of parsing a section in an AirScript module.

The SourceSection types are:

  • AirDef, which holds the name of the AIR.
  • TraceCols, which contains the parsed trace column information for the main and auxiliary execution traces. Each column is represented by its identifier.
  • PublicInputs, which is a vector of all of the public inputs defined in the module. Each public input is represented by its identifier and a fixed size.
  • PeriodicColumns, which is a vector of all of the periodic columns defined in the module. Each periodic column is represented by its identifier and a vector containing the pattern of its repeated (periodic) values.
  • BoundaryConstraints, which contains a vector of BoundaryConstraint expressions, each represented as an expression tree.
  • TransitionConstraints, which contains a vector of TransitionConstraint expressions, each represented as an expression tree.

Dependencies

~1–2.3MB
~57K SLoC