Crate pest_debugger

source ·
Expand description

pest debugger

This crate contains definitions for the debugger. A sample CLI-based debugger is available in main.rs. Other debugger frontends can be implemented using this crate’s DebuggerContext:

use pest_debugger::DebuggerContext;
use std::sync::mpsc::sync_channel;
let mut context = DebuggerContext::default();

context
.load_grammar_direct(
    "testgrammar",
    r#"alpha = { 'a'..'z' | 'A'..'Z' }
digit = { '0'..'9' }

ident = { !digit ~ (alpha | digit)+ }

ident_list = _{ ident ~ (" " ~ ident)* }"#,
).expect("Error: failed to load grammar");
context.load_input_direct("test test2".to_owned());

let (sender, receiver) = sync_channel(1);

context.add_breakpoint("ident".to_owned());
for b in context.list_breakpoints().iter() {
    println!("Breakpoint: {}", b);
}
context
.run("ident_list", sender)
.expect("Error: failed to run rule");

let event = receiver.recv().expect("Error: failed to receive event");
println!("Received a debugger event: {:?}", event);

context.cont().expect("Error: failed to continue");

let event = receiver.recv().expect("Error: failed to receive event");
println!("Received a debugger event: {:?}", event);

Current Limitations

  • relies on OS threads instead of stack-full generators
  • only shows position from the ParserState when it reaches a breakpoint
  • no way to run another rule from a breakpoint, only from the start

Structs

Enums