gpc
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 |