module Text.EBNF.Build.Parser (build, ioTryBuild, lookupGrammar) where
import Text.EBNF.SyntaxTree
import Text.EBNF.Informal (syntax)
import Text.EBNF.Helper
import Text.EBNF.Build.Parser.Parts
import Text.EBNF.Build.Parser.Except
import Text.Parsec.String
import System.IO
import Data.Either
build :: SyntaxTree -> [GrammarRule]
build st = rights . buildSyntax $ st
discard :: SyntaxTree -> SyntaxTree
discard = prune (\a -> identifier a `elem` list)
where
list = [ "irrelevent"
, "concatenate symbol"
, "definition separator symbol"
, "defining symbol"
, "terminator symbol"]
ioTryBuild :: SyntaxTree -> IO [GrammarRule]
ioTryBuild st =
case generateReport st of
Clean -> return $ build st
Warning warns -> do
hPrint stderr $ Warning warns
return $ build st
Failed fails -> (die . show $ Failed fails) >> return []