The ebnf-bff package

[ Tags: ebnf, library, metalanguage, mit, parsing, program, text ] [ Propose Tags ]

A library & program that builds parsers from ISO EBNF using Parsec

[Skip to Readme]


Change log
Dependencies aeson (==0.8.*), base (<=4.9), bytestring (==0.10.*), cond (==0.4.*), directory (==1.2.*), ebnf-bff (>=0.1), parsec (==3.1.*), text (==1.2.*) [details]
License MIT
Author Lokidottir
Category Text, Metalanguage, EBNF, Parsing
Source repository head: git clone
Uploaded Sun Sep 20 18:47:49 UTC 2015 by Lokidottir
Distributions NixOS:
Executables ebnf-parse
Downloads 252 total (4 in the last 30 days)
Rating 0.0 (0 ratings) [clear rating]
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2015-09-20 [all 1 reports]
Hackage Matrix CI




Maintainer's Corner

For package maintainers and hackage trustees

Readme for ebnf-bff-

[back to package description]


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