Skip to content

Ixon text format (.ixon): AST-level parser + canonical printer in Rus… - #518

Merged
johnchandlerburnham merged 1 commit into
mainfrom
jcb/ixon-syntax
Jul 26, 2026
Merged

Ixon text format (.ixon): AST-level parser + canonical printer in Rus…#518
johnchandlerburnham merged 1 commit into
mainfrom
jcb/ixon-syntax

Conversation

@johnchandlerburnham

Copy link
Copy Markdown
Member

…t and Lean

A Lean-resembling closed grammar denoting the named Ix level (never the pack tables): all decl forms (def/theorem/opaque, axiom, quot, inductive, recursor, mutual, projections), imports as namespace mounts with Name#hash pinned references, and a trailing main expression |- value : type (an anonymous definition, marked as the bundle main).

  • crates/ixon/src/syntax/: nom parser, Wadler-style canonical printer (cached-width doc engine), structured positioned errors, byte/node/depth metering; quickcheck properties (printer fixpoint, totality on arbitrary and mutated input, node count <= printed bytes).
  • Ix/IxonSyntax/: behavioral Lean mirror (char-array scanner with byte spans, same doc engine); LSpec suite ixon-syntax with SlimCheck properties; unit corpora share golden strings with the Rust suite, and both printers emit byte-identical canonical output (verified by direct diff; FFI parity externs come with the resolve stage).

Grammar decisions locked by property testing: declaration-starting words are reserved; the main-expression turnstile is required after declarations and optional for sole-item files; the version header is optional (absent means version 1, forever); whitespace is the explicit space/tab/CR/LF set; Name#hash lexing is
adjacency-sensitive.

…t and Lean

A Lean-resembling closed grammar denoting the named Ix level (never
the pack tables): all decl forms (def/theorem/opaque, axiom, quot,
inductive, recursor, mutual, projections), imports as namespace
mounts with Name#hash pinned references, and a trailing main
expression `|- value : type` (an anonymous definition, marked as the
bundle main).

- crates/ixon/src/syntax/: nom parser, Wadler-style canonical printer
  (cached-width doc engine), structured positioned errors,
  byte/node/depth metering; quickcheck properties (printer fixpoint,
  totality on arbitrary and mutated input, node count <= printed
  bytes).
- Ix/IxonSyntax/: behavioral Lean mirror (char-array scanner with
  byte spans, same doc engine); LSpec suite `ixon-syntax` with
  SlimCheck properties; unit corpora share golden strings with the
  Rust suite, and both printers emit byte-identical canonical output
  (verified by direct diff; FFI parity externs come with the resolve
  stage).

Grammar decisions locked by property testing: declaration-starting
words are reserved; the main-expression turnstile is required after
declarations and optional for sole-item files; the version header is
optional (absent means version 1, forever); whitespace is the
explicit space/tab/CR/LF set; Name#hash lexing is
adjacency-sensitive.
@johnchandlerburnham
johnchandlerburnham merged commit b6fdc93 into main Jul 26, 2026
10 checks passed
@johnchandlerburnham
johnchandlerburnham deleted the jcb/ixon-syntax branch July 26, 2026 19:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants