ReadFn.hs revision 79831982ddcb41676a033e6f5ab1d60343de1539
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 BungiuMaintainer : hets@tzi.de
ccb84c1cb43fb0ed70c5bf2d364e671820473ed5Francisc Nicolae BungiuStability : provisional
ccb84c1cb43fb0ed70c5bf2d364e671820473ed5Francisc Nicolae BungiuPortability : non-portable(DevGraph)
ccb84c1cb43fb0ed70c5bf2d364e671820473ed5Francisc Nicolae Bungiu reading ATerms, CASL, HetCASL files and parsing them into an
15d62726781e67fe6458fbcf0a8c46832a7bb8daFelix Gabriel Mance appropiate data structure
ccb84c1cb43fb0ed70c5bf2d364e671820473ed5Francisc Nicolae Bungiumodule ReadFn where
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 Left err -> fail (showErr err)
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder Right ast -> return ast
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"
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"
3e0eb79b52a3078a12531efc3f66d0d94fd9938dFelix Gabriel MancereadLIB_DEFN_from_file :: FilePath -> IO (Result LIB_DEFN)
31a5ba51cd6d24e28a23abf64ce4043a45eabbefFelix Gabriel MancereadLIB_DEFN_from_file = readShATermFile
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 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"
3e0eb79b52a3078a12531efc3f66d0d94fd9938dFelix Gabriel ManceglobalContextfromShATerm :: FilePath -> IO (Result GlobalContext)
e5ea4eeaeefd3521ae3475719e18c96cf91637d5Felix Gabriel ManceglobalContextfromShATerm = readShATermFile