never executed always true always false
1 {-# OPTIONS_HADDOCK hide #-}
2
3 -- |
4 -- Module : Aihc.Parser.Internal.FromTokens
5 -- Description : Internal parsing functions from token streams
6 -- License : Unlicense
7 --
8 -- @since 0.1.0.0
9 --
10 -- __Warning:__ This is an internal module and is not meant to be used directly.
11 -- The API may change without notice.
12 --
13 -- This module exposes parsing functions that work directly on token streams.
14 -- These are primarily used for testing and internal purposes.
15 module Aihc.Parser.Internal.FromTokens
16 ( parseExprFromTokens,
17 parsePatternFromTokens,
18 parseTypeFromTokens,
19 parseModuleFromTokens,
20 parseDeclFromTokens,
21 parseImportDeclFromTokens,
22 parseModuleHeaderFromTokens,
23 )
24 where
25
26 import Aihc.Parser.Internal.Common (TokParser)
27 import Aihc.Parser.Internal.Decl (declParser, importDeclParser, moduleHeaderParser)
28 import Aihc.Parser.Internal.Expr (exprParser, patternParser, typeParser)
29 import Aihc.Parser.Internal.Module (moduleParser)
30 import Aihc.Parser.Lex (LexToken)
31 import Aihc.Parser.Syntax (Decl, Expr, ImportDecl, Module, ModuleHead, Pattern, Type)
32 import Aihc.Parser.Types
33 import Text.Megaparsec (runParser)
34 import Text.Megaparsec qualified as MP
35
36 parseFromTokens :: TokParser a -> FilePath -> [LexToken] -> ParseResult a
37 parseFromTokens parser sourceName toks =
38 case runParser (parser <* MP.eof) sourceName (TokStream toks) of
39 Left bundle -> ParseErr bundle
40 Right parsed -> ParseOk parsed
41
42 parseExprFromTokens :: FilePath -> [LexToken] -> ParseResult Expr
43 parseExprFromTokens = parseFromTokens exprParser
44
45 parsePatternFromTokens :: FilePath -> [LexToken] -> ParseResult Pattern
46 parsePatternFromTokens = parseFromTokens patternParser
47
48 parseTypeFromTokens :: FilePath -> [LexToken] -> ParseResult Type
49 parseTypeFromTokens = parseFromTokens typeParser
50
51 parseModuleFromTokens :: FilePath -> [LexToken] -> ParseResult Module
52 parseModuleFromTokens = parseFromTokens moduleParser
53
54 parseDeclFromTokens :: FilePath -> [LexToken] -> ParseResult Decl
55 parseDeclFromTokens = parseFromTokens declParser
56
57 parseImportDeclFromTokens :: FilePath -> [LexToken] -> ParseResult ImportDecl
58 parseImportDeclFromTokens = parseFromTokens importDeclParser
59
60 parseModuleHeaderFromTokens :: FilePath -> [LexToken] -> ParseResult ModuleHead
61 parseModuleHeaderFromTokens = parseFromTokens moduleHeaderParser