CoffeeGrinder implements both Earley and GLL parsers. Both are capable of using ambiguous grammars. CoffeeGrinder parses (grinds?) a sequence of tokens and returns a Shared Packed Parse Forest. Individual parse trees can be obtained from the forest.

This parser is a fairly literal implementation of the parser in §5 of SPPF-Style Parsing From Earley Recognisers. It has been extended slightly to return a little more information in the SPPF and to support parses that match only a prefix of the input sequence.

References