{- | A simple, concrete instance of 'Cfg' that can be parsed from source.

The grammar of Bnf source is:

@
grammar ::= (production)+.
production ::= LOWER_CASE_STRING "::=" right_hand_sides ".".
right_hand_sides ::= right_hand_side ("|" right_hand_side)*.
right_hand_side ::= term*.
term ::= UPPER_CASE_STRING | LOWER_CASE_STRING.
@

where /*/ means zero or more repetitions and /+/ means one or more
repetitions.  Terminals are indicated by strings of upper-case
characters and underscores; nonterminals by strings of lower-case
characters and underscores.  Quoted strings are literal tokens.

-}
module Data.Cfg.Bnf
  ( Grammar(..)
  , bnf
  , parse
  ) where

import Data.Cfg.Bnf.Parser
import Data.Cfg.Bnf.QQ
import Data.Cfg.Bnf.Syntax