aihc-parser-1.0.0.2: src/Aihc/Parser/Internal/FromTokens.hs
-- |
-- Module : Aihc.Parser.Internal.FromTokens
-- Description : Internal parsing functions from token streams
-- License : Unlicense
--
-- @since 0.1.0.0
--
-- __Warning:__ This is an internal module and is not meant to be used directly.
-- The API may change without notice.
--
-- This module exposes parsing functions that work directly on token streams.
-- These are primarily used for testing and internal purposes.
module Aihc.Parser.Internal.FromTokens
( parseExprFromTokens,
parsePatternFromTokens,
parseSignatureTypeFromTokens,
parseTypeFromTokens,
parseModuleFromTokens,
parseDeclFromTokens,
parseImportDeclFromTokens,
parseModuleHeaderFromTokens,
)
where
import Aihc.Parser.Internal.Common (TokParser, eofTok)
import Aihc.Parser.Internal.Decl (declParser)
import Aihc.Parser.Internal.Errors (parseErrorBundleToSpannedText)
import Aihc.Parser.Internal.Expr (exprParser)
import Aihc.Parser.Internal.Import (importDeclParser, moduleHeaderParser)
import Aihc.Parser.Internal.Module (moduleParser)
import Aihc.Parser.Internal.Pattern (patternParser)
import Aihc.Parser.Internal.Type (typeParser, typeSignatureParser)
import Aihc.Parser.Lex (LexToken)
import Aihc.Parser.Syntax (Decl, Expr, ImportDecl, Module, ModuleHead, Pattern, Type)
import Aihc.Parser.Types
import Text.Megaparsec (runParser)
parseFromTokens :: TokParser a -> FilePath -> [LexToken] -> ParseResult a
parseFromTokens parser sourceName toks =
case runParser (parser <* eofTok) sourceName (mkTokStreamFromTokens toks) of
Left bundle -> ParseErr (parseErrorBundleToSpannedText bundle)
Right parsed -> ParseOk parsed
parseExprFromTokens :: FilePath -> [LexToken] -> ParseResult Expr
parseExprFromTokens = parseFromTokens exprParser
parsePatternFromTokens :: FilePath -> [LexToken] -> ParseResult Pattern
parsePatternFromTokens = parseFromTokens patternParser
parseSignatureTypeFromTokens :: FilePath -> [LexToken] -> ParseResult Type
parseSignatureTypeFromTokens = parseFromTokens typeSignatureParser
parseTypeFromTokens :: FilePath -> [LexToken] -> ParseResult Type
parseTypeFromTokens = parseFromTokens typeParser
parseModuleFromTokens :: FilePath -> [LexToken] -> ParseResult Module
parseModuleFromTokens = parseFromTokens moduleParser
parseDeclFromTokens :: FilePath -> [LexToken] -> ParseResult Decl
parseDeclFromTokens = parseFromTokens declParser
parseImportDeclFromTokens :: FilePath -> [LexToken] -> ParseResult ImportDecl
parseImportDeclFromTokens = parseFromTokens importDeclParser
parseModuleHeaderFromTokens :: FilePath -> [LexToken] -> ParseResult ModuleHead
parseModuleHeaderFromTokens = parseFromTokens moduleHeaderParser