Skip to content
/ lip Public

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

Notifications You must be signed in to change notification settings

AlienKevin/lip

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages