parsanol 0.1.4

High-performance PEG parser library with packrat memoization andarena allocation
Documentation

Parsanol - Highly Optimized Rust PEG Parser Library

This is a generic PEG parser library that can be used for any language. It provides:

  • Core PEG parsing with packrat memoization
  • Arena allocation for zero-copy AST construction
  • Parser DSL for idiomatic grammar definition
  • Generic lexer framework
  • Rich error reporting with tree-structured errors
  • Transformation system for converting parse trees to typed structs
  • Infix expression parsing with precedence handling
  • Developer tools (debug tracing, visualization)
  • Optional Ruby FFI bindings
  • Optional WASM bindings

Quick Start

use parsanol::portable::{Grammar, PortableParser, AstArena};

// Define grammar via JSON
let grammar_json = r#"{
    "atoms": [
        { "Str": { "pattern": "hello" } }
    ],
    "root": 0
}"#;

let grammar: Grammar = serde_json::from_str(grammar_json).unwrap();
let input = "hello";

let mut arena = AstArena::for_input(input.len());
let mut parser = PortableParser::new(&grammar, input, &mut arena);
let ast = parser.parse().unwrap();

Using the Parser DSL

use parsanol::portable::parser_dsl::*;

let grammar = GrammarBuilder::new()
    .rule("greeting", str("hello").then(str("world")))
    .build();

Feature Flags

  • ruby - Enable Ruby FFI bindings via magnus
  • wasm - Enable WebAssembly bindings
  • logging - Enable debug logging using the log crate
  • parallel - Enable parallel parsing with rayon