Parser combinators & EBNF, BFFs!

Latest on Hackage:

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.

MIT licensed by Lokidottir
Maintained by ma302fh@gold.ac.uk


Parser combinators & EBNF, BFFs!

Currently barebones, but (most of) the help text is relevant (no --prune-ids yet).


Installing (Linux)

As standard for installing haskell programs, you must have ghc and cabal installed

git clone https://github.com/Lokidottir/ebnf-bff
cd ebnf-bff
sudo cabal install --only-dependencies --global && sudo cabal install --global

Installing from cabal

sudo cabal install ebnf-bff --global


help text for ebnf-parse:

ebnf-parse written by fionan haralddottir, available under the MIT licence.
this program is part of the ebnf-bff cabal package

this is a program that parses an ISO standard EBNF grammar and outputs an
abstract syntax tree in the format:

identifier: <string>
content: <string>
    line: <int>
    col: <int>
    name: <string>
children: [<syntax tree>]

    ebnf-parse [OPTIONS]
    -h --help                      | show this text.
    -p --primary-rule=rulename     | the rule to be applied to the whole of each
                                     source file.
    -g --grammar=filename          | load the EBNF grammar from the given file
    -o --output=[filename|stdout]  | output the AST to the given file or stdout
    --format=[json|xml|plaintext]  | the format for the AST, defaults to
    --export-ebnf-ast              | instead of parsing given files, parse the
                                     EBNF grammar and output a raw AST of the
                                     grammar (still uses --prune-ids, --format
    --prune-ids=[comma delim list] | removes any subtrees from the tree that
                                     have an identifier from the given list
    -s --source-files              | all arguments after this flag will be
                                     assumed to be file names or directories
                                     for files to be parsed by the given grammar.


  • Clean up the project
  • Remove dependency to Aeson, for reducing the build times.
  • EBNF grammar analysis & reporting of potentially dangerous structures (such as parsing infinite empty strings, parsec already does this but we can give a source code location)
  • Better error messages on failed parsing of EBNF grammar
  • EBNF as defined in EBNF (properly)


This project is under the MIT licence.

Changes * Fixed bug that caused grouping sequences to no parse (a = ("a") would fail on the first bracket)

  • Refactored code according to hslint


  • Initial version
Depends on 8 packages:
Used by 1 package:
comments powered byDisqus