0 | module Parser.Package
 1 |
 2 | import public Parser.Lexer.Package
 3 | import public Parser.Rule.Package
 4 | import public Libraries.Text.Lexer
 5 | import public Libraries.Text.Parser
 6 | import public Parser.Support
 7 |
 8 | import Core.Core
 9 | import Core.FC
10 | import System.File
11 |
12 | %default total
13 |
14 | export
15 | runParser : (fname : String) -> (str : String) -> Rule ty -> Either Error ty
16 | runParser fname str p
17 |     = do toks   <- mapFst (\err => fromLexError
18 |                      (PhysicalPkgSrc fname) (NoRuleApply, err)) $ lex str
19 |          (_, val, _) <- mapFst (fromParsingErrors (PhysicalPkgSrc fname)) $ parse p toks
20 |          Right val
21 |
22 | export
23 | covering
24 | parseFile : (fname : String) -> Rule ty -> IO (Either Error ty)
25 | parseFile fname p
26 |     = do Right str <- readFile fname
27 |              | Left err => pure (Left (FileErr fname err))
28 |          pure (runParser fname str p)
29 |