module Text.EBNF.Build.Parser (build, ioTryBuild, lookupGrammar) where
import Text.EBNF.SyntaxTree
import Text.EBNF.Informal (syntax)
import Text.EBNF.Helper
import Text.Parsec.String
import Text.EBNF.Informal (nullParser)
import Text.EBNF.Build.Parser.Parts
import Text.EBNF.Build.Parser.Except
import System.IO
import Data.Either
build :: SyntaxTree -> [GrammarRule]
build st = rights . buildSyntax $ st
discard :: SyntaxTree -> SyntaxTree
discard st = prune (\a -> elem (identifier a) list) st
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
hPutStrLn stderr . show $ (Warning warns)
return $ build st
Failed fails -> (die . show $ (Failed fails)) >> return []