If you are like me, you have a tattered copy of the Dragon book on your bookshelf and have a fading memory of LL(k) and LALR(1) lores gained through your battles with Yacc, Bison, JavaCC, and ANTLR. Mostly, you remember wasting a lot of time wrestlig with the tool.
What I didn't know was that new parsing algorithms have appeared on the scene while I was busy in the ready-to-ship world: GLR (Generalized LR) and Earley. Actually, they are old algorithms whose latest implementations have now become competitive with the more popular yet more restrictive cousins. For more info on why they should be considered alongside LL and LALR, read John Aycock's Why Bison is Becoming Extinct.
Here are some popular GLR and Earley implementations to get you started:
- ElkHound - C++, BSD, sep. scanner (supposedly fastest)
- DParser – C, BSD, scannerless
- SGLR – scannerless
Earley implementation:
You might also want to read Current Parsing Techniques in Software Renovation Considered Harmful.