packages feed

ddc-tools-0.4.1.1: src/ddci-tetra/DDCI/Tetra/Command/Parse.hs

module DDCI.Tetra.Command.Parse
        (cmdParse)
where
import DDC.Interface.Source
import DDCI.Tetra.State
import DDC.Base.Pretty
import DDC.Source.Tetra.Lexer
import DDC.Source.Tetra.Parser
import DDC.Source.Tetra.Pretty          ()
import qualified DDC.Core.Lexer         as C
import qualified DDC.Base.Parser        as BP


cmdParse :: State -> Source -> String -> IO ()
cmdParse _state source str
 = goLex
 where  goLex 
         = let  tokens  = lexModuleString (nameOfSource source) 1 str
           in   goParse tokens

        goParse tokens
         = let  context = Context
                        { contextTrackedEffects         = True
                        , contextTrackedClosures        = True
                        , contextFunctionalEffects      = False
                        , contextFunctionalClosures     = False }

           in   case BP.runTokenParser 
                        C.describeTok 
                        (nameOfSource source)
                        (pModule context)
                        tokens of
                 Left err        -> error $ show err
                 Right mm        
                  -> do putStrLn (renderIndent $ ppr mm)