Nom is an excellent parser combinator library written in Rust. Use cases are similar to Regex or Flex/Bison. The latest 5.0 version takes advantage of new Rust language features to make it possible to use most of Nom without macros, but the documentation is still replete with examples using macros. I've written a brief tutorial to share my own journey learning Nom in the hope of making it easier for others. You can find it on Github.