[][src]Crate nom_tracable

nom-tracable is an extension of nom to trace parser.

Examples

The following example show a quick example.

use nom::branch::*;
use nom::character::complete::*;
use nom::IResult;
use nom_locate::LocatedSpan;
use nom_tracable::{tracable_parser, TracableInfo};

// Input type must implement trait Tracable
// nom_locate::LocatedSpan<T, TracableInfo> implements it.
type Span<'a> = LocatedSpan<&'a str, TracableInfo>;

// Apply tracable_parser by custom attribute
#[tracable_parser]
pub fn term(s: Span) -> IResult<Span, String> {
    let (s, x) = char('1')(s)?;
    Ok((s, x.to_string()))
}

#[test]
fn test() {
    // Configure trace setting
    let info = TracableInfo::new().forward(true).backward(true);
    let ret = term(LocatedSpan::new_extra("1", info));
    assert_eq!("\"1\"", format!("{:?}", ret.unwrap().1));
}

Structs

TracableInfo

Struct to have trace configuration.

Traits

HasTracableInfo

Trait to indicate TracableInfo is provided.

Tracable

Functions

backward_trace

Function to display backward trace. This is inserted by #[tracable_parser].

cumulative_histogram

Show cumulative histogram of parser call count.

custom_trace

Function to display custom trace.

forward_trace

Function to display forward trace. This is inserted by #[tracable_parser].

histogram

Show histogram of parser call count.

Attribute Macros

tracable_parser