28 lines
660 B
Haskell
28 lines
660 B
Haskell
|
|
module AST.Parser
|
|
( Source(..)
|
|
, parse
|
|
) where
|
|
|
|
import Control.Monad.Catch
|
|
|
|
import System.FilePath
|
|
|
|
import qualified AST.Pascaligo.Parser as Pascal
|
|
import qualified AST.Reasonligo.Parser as Reason
|
|
import AST.Skeleton
|
|
|
|
import ParseTree
|
|
import Parser
|
|
|
|
data UnsupportedExtension = UnsupportedExtension String
|
|
deriving stock Show
|
|
deriving anyclass Exception
|
|
|
|
parse :: Source -> IO (LIGO Info, [Msg])
|
|
parse src = do
|
|
case takeExtension $ srcPath src of
|
|
"religo" -> mkRawTreeReason src >>= runParserM . Reason.recognise
|
|
"ligo" -> mkRawTreePascal src >>= runParserM . Pascal.recognise
|
|
ext -> throwM $ UnsupportedExtension ext
|