1 unstable release

Uses new Rust 2021

0.0.0 Jul 4, 2022

MIT/Apache

3KB

Squatted crate for a Modern Parser Generator.

Contact @CAD97 if you want to collaborate on development of this tool. Solo development will happen when they find time and motivation concurrently.

Until then, check out tree-sitter.

Namely, inspired by matklad's post, mpg will provide

UX

Tooling designed IDE-first.

  • Interactive development. Provide example inputs while editing the grammar and immediately see the resulting syntax trees.
  • Inline snapshot tests. Example productions listed next to the defining rules are automatically tested with the resulting syntax trees tracked in version control.
  • Full LSP support.

API

  • Designed to be used on top of a separate lexer.
  • Supports pull-lexing with principled lexical feedback.
  • Prefers pre-lexing with replayable incremental reparsing.
  • Produces a homogeneous literal syntax tree.
  • Provides an optional typed view of the literal syntax tree.
  • Embeddable anywhere via a C API.

Parsing Techniques

  • Specify operator precedence and associativity directly.
  • Strong error tolerance/recovery via follow sets and explicit recovery points.
  • Choose your tradeoffs:
    • Guaranteed determinism at a cost of generality.
    • Full generality at the cost of ambiguity.

Quality of incorrect syntax error messages is a non-priority left to the user.

No runtime deps