#parser-combinator #combinator #functional #parser #error-message #message-parser

lip

Lip provides powerful parser combinators for creating reusable and flexible parsers

24 stable releases (8 major)

8.1.2 Jun 25, 2023
7.0.2 Jun 24, 2023
7.0.0 Jan 1, 2022
6.0.0 Dec 31, 2021
0.1.2 Mar 24, 2020

#88 in Parser tooling


Used in wordshk_tools

MIT license

1MB
3.5K SLoC

lip logo

Lip

Lip provides powerful parser combinators for creating reusable and flexible parsers.

Why Lip?

  • Easy to understand - uses intuitive combinators like keep and skip
  • Compact - takes less than an hour to learn this library fully
  • Flexible and composable parser combinators
  • Efficient - minimal backtracking
  • Built-in support for precise, located error messages
  • Keep track of extra states like line number and instruction index
  • Extensible - create your own combinators if needed
// Parse an (x, y) position pair
use lip::*;
let position = succeed!(|x, y| (x, y))
  .keep(int())
  .skip(token(","))
  .keep(int())
  .run("2,3", ()); // run this parser on string "2,3" without extra states
// when parsing finished, position == (2, 3)

Tutorial

Reading the parser combinator by Bodil is an excellent way to know how parser combinators work.

License

MIT

Credits

Based on Bodil's Parser Combinator Tutorial and Evan's elm/paser.

Dependencies