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
- Debugger for pest grammars.
Enums
- Possible errors that can occur in the debugger context.
- Events that are sent from the debugger.