Skip to content

Extension of nom to apply "Packrat Parsing"

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

dalance/nom-packrat

Repository files navigation

nom-packrat

Extension of nom to apply "Packrat Parsing".

Actions Status Crates.io Docs.rs

Requirement

nom must be 5.0.0 or later. nom-packrat can be applied to function-style parser only.

Usage

[dependencies]
nom-packrat = "0.7.0"

Example

use nom::character::complete::char;
use nom::IResult;
use nom_packrat::{init, packrat_parser, storage};

// Declare storage used by packrat_parser
storage!(String);

// Apply packrat_parser by custom attribute
#[packrat_parser]
pub fn parser(s: &str) -> IResult<&str, String> {
    let (s, x) = char('a')(s)?;
    Ok((s, x.to_string()))
}

fn main() {
    let input = "a";

    // Initialize before parsing
    init!();
    let result = parser(input);

    println!("{:?}", result);
}

Performance

Syntax

<S> ::= <T> + <S> | <T> - <S> | <T>
<T> ::= ( <S> ) | a

Input

The following 8 patterns. The first pattern is named as "pair 0" and the last is "pair 7".

a
(a)
((a))
(((a)))
((((a))))
(((((a)))))
((((((a))))))
(((((((a)))))))

Result

  • original : the original nom parser
  • packrat : all parsers with #[packrat_parser]
  • packrat_opt: only <T> with #[packrat_parser]

This is an edge case. The execution time of the original parser increases exponentially. By packrat pasring, the time becomes linear. Instead packrat parsers consume more memory than the original parser.

speed

memory

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

About

Extension of nom to apply "Packrat Parsing"

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages