A Haskell implementation of the ANTLR top-down parser generator https://github.com/cronburg/antlr-haskell#readme
|Latest on Hackage:||0.1.0.0|
This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.
A Haskell implementation of ANTLR.
In implementing ANTLR we referenced the behavior of the original Java version (ANTLR4): The definitive ANTLR4 Reference. However we have taken much liberty in the design of this library compared to the workflow of the original Java version. In particular in implementing ANTLR for Haskell we have followed the following principles:
- Parsing backends should be interchangeable
- GLR, LR, SLR, LL, ALL(*)
- Code should be first class and declarative
- The implementation of G4 is metacircular
- Regular expressions are interpreted
- Implement algorithms from first principles
- Set notation is used in implementing LL and LR algorithms.
- Pure functional implementations of parsing algorithms can eventually support embedding of arbitrary (including IO) actions without breaking the predictive parsing abstraction.
The library can be built with:
stack build # stack version 18.104.22.168 stack test antlr-haskell:simpl
Or with cabal-22.214.171.124 like:
cabal configure cabal install --only-dependencies --enable-tests cabal build cabal test sexpression
sample grammar for ALL(*)
S -> Ac | Ad
A -> aA | b
ALL(*) Input/output examples
*Test.AllStarTests> parse ['a', 'b', 'c'] (NT 'S') atnEnv (Just True, Node 'S' [Node 'A' [Leaf 'a', Node 'A' [Leaf 'b']], Leaf 'c'])
*Test.AllStarTests> parse ['b', 'd'] (NT 'S') atnEnv (Just True, Node 'S' [Node 'A' [Leaf 'b'], Leaf 'd'])
*Test.AllStarTests> parse ['a', 'a', 'a', 'a', 'b', 'c'] (NT 'S') atnEnv (Just True, Node 'S' [Node 'A' [Leaf 'a', Node 'A' [Leaf 'a', Node 'A' [Leaf 'a', Node 'A' [Leaf 'a', Node 'A' [Leaf 'b']]]]], Leaf 'c'])
- April 14, 2018: Moved to hpack’s package.yaml format instead of native cabal file.