Lip provides powerful parser combinators for creating reusable and flexible parsers.
- 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)
Reading the parser combinator by Bodil is an excellent way to know how parser combinators work.
MIT
Based on Bodil's Parser Combinator Tutorial and Evan's elm/paser.