[1] https://github.com/Engelberg/instaparse
I've heard of one C++ front end that uses it -- Elkhound -- but the only context I've heard of Elkhound is in GLR parsing! As far as I can tell Clang is now the state of the art. (i.e. Clang probably does everything Elkhound does, but better and faster.)
I have looked at least 30+ parsers for programming languages. I see:
- hand-written recursive descent (with operator precedence for expressions)
- yacc (Ruby, R, awk, etc.)
- ANTLR
- Bespoke parser generators
- Python's pgen.c - LL(1) with some tricks
- sqlite's Lemon - similar to Yacc except you push tokens
That's about it. I've never encountered notable usages of Earley or GLL or GLR parsing.http://semanticdesigns.com/Products/DMS/DMSToolkit.html
With all that, what do we need another parsing tech for if it's programming related? ;) GLR was also used for NLP. The Elkhound approach mixes (IIRC!) GLR and LALR to get benefits of both with it easily handling one of hardest languages out there.
A little weird to leave off the list one of best techniques around.
Also, silentbicycle countered with it and some other on top of that here:
I haven't seen GLR used in production either, but my experience with projects I've been involved in is that this is sometimes just due to inertia. Taking full advantage of GLR's support for ambiguity requires reworking both your grammar and your early stages of semantic analysis, and even if people agree that the result might be nicer, nobody has the time or motivation to do all that work.
It's used in other projects (eg, https://github.com/jddurand/MarpaX-Languages-C-AST ) but the only ones I found which look production ready, in a cursory search, also involved the author.
That's not to say they will never jump the chasm. I'm just a bit conservative in my design choices and I look for algorithms that have been "battle-tested".
Aycock's work with SPARK was one of the influences of Kegler's Marpa. I was surprised to see Aycock mentioned on this timeline as it was the only name were I could say "I met him".
Thus, I can say that for my work, I used the Earley algorithm. However, I don't think it was essential for the parsing I needed, only that it was available.
https://eli.thegreenplace.net/2014/06/04/using-asdl-to-descr...
In other words it was DSL used to implement a DSL used to implement Python -- how meta! But that post describes replacing it with a simple recursive descent parser in Python.
I used ASDL itself (not SPARK) extensively in my shell:
http://www.oilshell.org/blog/tags.html?tag=ASDL#ASDL
But still I would say that counts as a production usage of Earley parsing! Interesting. I don't know of any others.
(On the other hand, the fact that it was replaced with a few hundred lines of Python code means it probably wasn't needed in the first place.)