#parser-combinator #string-parser #minimalist #zero-copy #elegant

parcelona

minimalistic elegance parser combinator library

12 unstable releases (3 breaking)

0.4.3 Oct 5, 2024
0.4.2 Oct 1, 2024
0.4.1 Sep 30, 2024
0.3.2 Sep 23, 2024
0.1.9 Sep 16, 2024

#69 in Parser tooling

Download history 11/week @ 2024-11-20 9/week @ 2024-11-27 37/week @ 2024-12-04 85/week @ 2024-12-11 53/week @ 2024-12-18 15/week @ 2024-12-25 30/week @ 2025-01-08 32/week @ 2025-01-15 8/week @ 2025-01-22 48/week @ 2025-02-05 2/week @ 2025-02-12 16/week @ 2025-02-19 48/week @ 2025-02-26 30/week @ 2025-03-05

100 downloads per month
Used in 2 crates

MIT license

38KB
837 lines

parcelona

minimalistic elegant parser combinators library

  • full zero copy
  • parsing over &[T]
  • check error end of data e.is_eod()
#[test]
fn t_color() {
use atoi::FromRadix16;

#[derive(Debug, PartialEq)]
pub struct Color {
  pub red: u8,
  pub green: u8,
  pub blue: u8,
}
let input = "#2F14DF".as_bytes();

let hex_color = fmap(seq_exact(is_hex_digit,2),|x| {let (r,_) = u8::from_radix_16(x); r});
let (_input,c) = right(starts_with(b"#"), hex_color.more_exact(3)).parse(input).unwrap();
let color = Color{ red:c[0], green:c[1], blue:c[2] };

assert_eq!(Color{red: 47, green: 20, blue: 223}, color);
}

how to parse utf8 &str ? use crate unicode-segmentation

doc

ru

parser_combinator

This core of library and has parsers:

  • data_end
  • any
  • starts_with
  • starts_with_any
  • take
  • seq
  • seq_exact
  • seq_max
  • seq_min
  • seq_range
  • seq_ext
  • ClassOfSymbols
  • StaticClassOfSymbols

and has many parser combinators:

  • not (parser)
  • map (parser,Fn)
  • fmap (parser,Fn)
  • frmap (parser,Fn)
  • option (parser)
  • pair (parser,parser)
  • or (parser,parser)
  • left (parser,parser)
  • right (parser,parser)
  • left_opt (parser,parser)
  • right_opt (parser,parser)
  • more (parser)
  • more_max (parser,usize)
  • more_min (parser,usize)
  • more_exact (parser,usize)
  • more_range (parser,(usize,usize))
  • alt ((tuple of parsers))
  • permut ((tuple of parsers))
  • permut_part ((tuple of parsers))
  • find_stop (parser,parser)
  • find (parser)
  • sep_pair (parser,parser,parser)
  • sep_pair_opt (parser,parser,parser)
  • between (parser,parser,parser)
  • between_opt (parser,parser,parser)
  • and_then (parser,parser,Fn)
  • or_then (parser,parser,Fn)
  • sep_list (parser,parser,parser)

u8

This functions for u8

examples

  • see examples, cargo run --example parse_tag
  • take_sni tls sni hand shake parsing
  • tag_parser parse tags like html

Dependencies

~0.8–1.4MB
~26K SLoC