ReadFn.hs revision 79831982ddcb41676a033e6f5ab1d60343de1539
ccb84c1cb43fb0ed70c5bf2d364e671820473ed5Francisc Nicolae Bungiu{-|
ccb84c1cb43fb0ed70c5bf2d364e671820473ed5Francisc Nicolae Bungiu
734257b9ea9fcaa18d4e3627f54f5295a99aa1f7Felix Gabriel ManceModule : $Header$
ccb84c1cb43fb0ed70c5bf2d364e671820473ed5Francisc Nicolae BungiuCopyright : (c) Klaus L�ttich, Uni Bremen 2002-2004
ccb84c1cb43fb0ed70c5bf2d364e671820473ed5Francisc Nicolae BungiuLicence : similar to LGPL, see HetCATS/LICENCE.txt or LIZENZ.txt
ccb84c1cb43fb0ed70c5bf2d364e671820473ed5Francisc Nicolae Bungiu
ccb84c1cb43fb0ed70c5bf2d364e671820473ed5Francisc Nicolae BungiuMaintainer : hets@tzi.de
ccb84c1cb43fb0ed70c5bf2d364e671820473ed5Francisc Nicolae BungiuStability : provisional
ccb84c1cb43fb0ed70c5bf2d364e671820473ed5Francisc Nicolae BungiuPortability : non-portable(DevGraph)
c038fcf2030a6cfac7a261dee48a9eb29edb78eaFelix Gabriel Mance
ccb84c1cb43fb0ed70c5bf2d364e671820473ed5Francisc Nicolae Bungiu reading ATerms, CASL, HetCASL files and parsing them into an
15d62726781e67fe6458fbcf0a8c46832a7bb8daFelix Gabriel Mance appropiate data structure
734257b9ea9fcaa18d4e3627f54f5295a99aa1f7Felix Gabriel Mance
c038fcf2030a6cfac7a261dee48a9eb29edb78eaFelix Gabriel Mance-}
c038fcf2030a6cfac7a261dee48a9eb29edb78eaFelix Gabriel Mance
ccb84c1cb43fb0ed70c5bf2d364e671820473ed5Francisc Nicolae Bungiumodule ReadFn where
ccb84c1cb43fb0ed70c5bf2d364e671820473ed5Francisc Nicolae Bungiu
ccb84c1cb43fb0ed70c5bf2d364e671820473ed5Francisc Nicolae Bungiuimport Logic.Logic
ccb84c1cb43fb0ed70c5bf2d364e671820473ed5Francisc Nicolae Bungiuimport Logic.Grothendieck
ed1b8e97e72b2e3e92edaf2eb22a4b5373d705f1Felix Gabriel Manceimport Comorphisms.LogicGraph
5180a08007989fd364622fc9bc01f82141643f7bFelix Gabriel Manceimport Syntax.AS_Library
ccb84c1cb43fb0ed70c5bf2d364e671820473ed5Francisc Nicolae Bungiuimport Syntax.Parse_AS_Library
12078a24d49ba36b83cda9d07c8e8a480c493fe8Felix Gabriel Manceimport Static.DevGraph
734257b9ea9fcaa18d4e3627f54f5295a99aa1f7Felix Gabriel Mance
c038fcf2030a6cfac7a261dee48a9eb29edb78eaFelix Gabriel Manceimport ATC.AS_Library
0be7a9c012366ada63d587898a15c551b499b76dFelix Gabriel Manceimport ATC.DevGraph
0be7a9c012366ada63d587898a15c551b499b76dFelix Gabriel Manceimport ATC.Sml_cats
3b15ba1ffa9a23ca14f3882d1390abddfc494009Felix Gabriel Mance
3b15ba1ffa9a23ca14f3882d1390abddfc494009Felix Gabriel Manceimport Common.ATerm.Lib
0be7a9c012366ada63d587898a15c551b499b76dFelix Gabriel Manceimport Common.AnnoState
e5dc5119231bdeb5c604f7709e0fa197fd2c4829Felix Gabriel Manceimport Common.Id
e5dc5119231bdeb5c604f7709e0fa197fd2c4829Felix Gabriel Manceimport Common.Result
0be7a9c012366ada63d587898a15c551b499b76dFelix Gabriel Manceimport Common.Lib.Parsec
0be7a9c012366ada63d587898a15c551b499b76dFelix Gabriel Mance
30e9cf458094e5970bc06be667558961c2eccff4Felix Gabriel Manceimport Options
30e9cf458094e5970bc06be667558961c2eccff4Felix Gabriel Manceimport Version
e5dc5119231bdeb5c604f7709e0fa197fd2c4829Felix Gabriel Mance
30e9cf458094e5970bc06be667558961c2eccff4Felix Gabriel Manceread_LIB_DEFN_M :: Monad m => AnyLogic -> FilePath -> String -> m LIB_DEFN
12078a24d49ba36b83cda9d07c8e8a480c493fe8Felix Gabriel Manceread_LIB_DEFN_M defl file input =
12078a24d49ba36b83cda9d07c8e8a480c493fe8Felix Gabriel Mance if null input then fail ("empty input file: " ++ file) else
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder case runParser (library (defl, logicGraph)) emptyAnnos
12078a24d49ba36b83cda9d07c8e8a480c493fe8Felix Gabriel Mance file input of
12078a24d49ba36b83cda9d07c8e8a480c493fe8Felix Gabriel Mance Left err -> fail (showErr err)
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder Right ast -> return ast
12078a24d49ba36b83cda9d07c8e8a480c493fe8Felix Gabriel Mance
0be7a9c012366ada63d587898a15c551b499b76dFelix Gabriel Manceread_LIB_DEFN :: HetcatsOpts -> FilePath -> IO LIB_DEFN
30e9cf458094e5970bc06be667558961c2eccff4Felix Gabriel Manceread_LIB_DEFN opt file =
30e9cf458094e5970bc06be667558961c2eccff4Felix Gabriel Mance do putIfVerbose opt 3 ("Reading file: " ++ file)
0be7a9c012366ada63d587898a15c551b499b76dFelix Gabriel Mance input <- readFile file
30e9cf458094e5970bc06be667558961c2eccff4Felix Gabriel Mance defl <- lookupLogic "logic from command line: "
3e0eb79b52a3078a12531efc3f66d0d94fd9938dFelix Gabriel Mance (defLogic opt) logicGraph
3e0eb79b52a3078a12531efc3f66d0d94fd9938dFelix Gabriel Mance ld <- case guess file (intype opt) of
9c3f6477a95da46a907326206673b4a5c2164164Felix Gabriel Mance ATermIn _ -> read_sml_ATerm file
3e0eb79b52a3078a12531efc3f66d0d94fd9938dFelix Gabriel Mance ASTreeIn _ -> error "Abstract Syntax Trees aren't implemented yet"
3e0eb79b52a3078a12531efc3f66d0d94fd9938dFelix Gabriel Mance CASLIn -> do
30e9cf458094e5970bc06be667558961c2eccff4Felix Gabriel Mance read_LIB_DEFN_M defl file input
3e0eb79b52a3078a12531efc3f66d0d94fd9938dFelix Gabriel Mance HetCASLIn -> do
3e0eb79b52a3078a12531efc3f66d0d94fd9938dFelix Gabriel Mance read_LIB_DEFN_M defl file input
30e9cf458094e5970bc06be667558961c2eccff4Felix Gabriel Mance _ -> error "Unknown InType wanted in read_LIB_DEFN"
9c3f6477a95da46a907326206673b4a5c2164164Felix Gabriel Mance return ld
316ef492799cd45fea0f5c26932f49adddfda3f7Felix Gabriel Mance
3e0eb79b52a3078a12531efc3f66d0d94fd9938dFelix Gabriel MancereadLIB_DEFN_from_file :: FilePath -> IO (Result LIB_DEFN)
31a5ba51cd6d24e28a23abf64ce4043a45eabbefFelix Gabriel MancereadLIB_DEFN_from_file = readShATermFile
30e9cf458094e5970bc06be667558961c2eccff4Felix Gabriel Mance
3e0eb79b52a3078a12531efc3f66d0d94fd9938dFelix Gabriel MancereadShATermFile :: (ATermConvertible a) => FilePath -> IO (Result a)
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von SchroederreadShATermFile fp = do str <- readFile fp
316ef492799cd45fea0f5c26932f49adddfda3f7Felix Gabriel Mance return (fromShATermString str)
316ef492799cd45fea0f5c26932f49adddfda3f7Felix Gabriel Mance
316ef492799cd45fea0f5c26932f49adddfda3f7Felix Gabriel MancefromShATermString :: (ATermConvertible a) => String -> Result a
31a5ba51cd6d24e28a23abf64ce4043a45eabbefFelix Gabriel MancefromShATermString str =
0be7a9c012366ada63d587898a15c551b499b76dFelix Gabriel Mance case getATerm att of
30e9cf458094e5970bc06be667558961c2eccff4Felix Gabriel Mance ShAAppl "hets" [versionnr,aterm] [] ->
e5e3f128bbd44dd393e1038718038bd323f5e415Felix Gabriel Mance if hetcats_version == (fromShATerm $ getATermByIndex1 versionnr att)
e5e3f128bbd44dd393e1038718038bd323f5e415Felix Gabriel Mance then Result [] (Just $ fromShATerm $ getATermByIndex1 aterm att)
e5e3f128bbd44dd393e1038718038bd323f5e415Felix Gabriel Mance else Result [dia1] Nothing
e5e3f128bbd44dd393e1038718038bd323f5e415Felix Gabriel Mance _ -> Result [dia2] Nothing
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder where att = readATerm str
e5e3f128bbd44dd393e1038718038bd323f5e415Felix Gabriel Mance dia1 = Diag Warning "Wrong version number ... re-analyzing" nullPos
e5e3f128bbd44dd393e1038718038bd323f5e415Felix Gabriel Mance dia2 = Diag Warning "Couldn't convert ShATerm back from file"
734257b9ea9fcaa18d4e3627f54f5295a99aa1f7Felix Gabriel Mance nullPos
31a5ba51cd6d24e28a23abf64ce4043a45eabbefFelix Gabriel Mance
3e0eb79b52a3078a12531efc3f66d0d94fd9938dFelix Gabriel ManceglobalContextfromShATerm :: FilePath -> IO (Result GlobalContext)
e5ea4eeaeefd3521ae3475719e18c96cf91637d5Felix Gabriel ManceglobalContextfromShATerm = readShATermFile
15d62726781e67fe6458fbcf0a8c46832a7bb8daFelix Gabriel Mance