gpc icon indicating copy to clipboard operation
gpc copied to clipboard

Leightweight generalized parser combinators

GPC

GPC is a library providing generalized parser combinators which are able to parse all context-free grammars completely. This includes support for left-recursion and reporting all possible parses of ambiguous grammars.

GPC is currently only a proof of concept. Of course it needs a much more elaborate API, but before that I want to implement disambiguation strategies. I have also not put any effort in making this library performant yet.

Comparison with other parsing techniques

Feature (atto/mega)parsec happy (LALR) Earley GPC
No shift-reduce conflicts :heavy_check_mark: :x: :heavy_check_mark: :heavy_check_mark:
Left-recusion :x: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
Pure Haskell :heavy_check_mark: :x: :heavy_check_mark: :heavy_check_mark:
Monadic interface :heavy_check_mark: :x: :x: :heavy_check_mark:
Polynomial time worst-case :x: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
Linear time worst-case :x: :heavy_check_mark: :x: :x:
Linear time possible :heavy_check_mark: :heavy_check_mark: :x: :heavy_check_mark:
Disambiguation annotations :x: :x: :x: planned