0N/ADescription : Writing various formats, according to Hets options
0N/ACopyright : (c) Klaus Luettich,
C.Maeder, Uni Bremen 2002-2006
0N/AMaintainer : Christian.Maeder@dfki.de
0N/AStability : provisional
0N/APortability : non-portable(DevGraph)
0N/AWriting various formats, according to Hets options
writeVerbFile :: HetcatsOpts -> FilePath -> String -> IO ()
writeVerbFile opts f str = do
putIfVerbose opts 2 $ "Writing file: " ++ f
-- | compute for each LibName in the List a path relative to the given FilePath
writeVerbFiles :: HetcatsOpts -- ^ Hets options
-> String -- ^ A suffix to be combined with the libname
-> [(LibName, String)] -- ^ An output list
writeVerbFiles opts suffix outl =
where f (ln, s) = writeVerbFile opts (libNameToFile ln ++ suffix) s
writeLibEnv :: HetcatsOpts -> FilePath -> LibEnv -> LibName -> OutType
writeLibEnv opts filePrefix lenv ln ot =
let f = filePrefix ++ "." ++ show ot
dg = lookupDGraph ln lenv in case ot of
Prf -> toShATermString (ln, lookupHistory ln lenv)
XmlOut -> writeVerbFile opts f $ ppTopElement $
ToXml.dGraph lenv dg
let Result ds mOmd = exportLibEnv (recurse opts) (outdir opts) ln lenv
Just omd -> writeVerbFiles opts ".omdoc"
$ map (\ (libn, od) -> (libn, xmlOut od)) omd
Nothing -> putIfVerbose opts 0 "could not translate to OMDoc"
GraphOut (Dot showInternalNodeLabels) -> writeVerbFile opts f
$ dotGraph showInternalNodeLabels dg
writeSoftFOL :: HetcatsOpts -> FilePath -> G_theory -> LibName -> SIMPLE_ID
-> SPFType -> Int -> String -> IO ()
writeSoftFOL opts f gTh ln i c n msg = do
mDoc <- printTheoryAsSoftFOL ln i n cc
$ (if cc then theoremsToAxioms else id) gTh
maybe (putIfVerbose opts 0 $
"could not translate to " ++ msg ++ " file: " ++ f)
case parse (if n == 0 then forget parseSPASS else forget tptp)
Left err -> putIfVerbose opts 0 $ show err
_ -> putIfVerbose opts 3 $ "reparsed: " ++ f
writeVerbFile opts f str) mDoc
writeIsaFile :: HetcatsOpts -> FilePath -> G_theory -> LibName -> SIMPLE_ID
writeIsaFile opts filePrefix raw_gTh ln i = do
let Result ds mTh = createIsaTheory raw_gTh
addThn = (++ '_' : show i)
putIfVerbose opts 0 $ "could not translate to Isabelle theory: " ++ fp
let tn = addThn . reverse . takeWhile (/= '/') . reverse $ case
sf = shows (printIsaTheory tn sign sens) "\n"
case parse parseTheory f sf of
Left err -> putIfVerbose opts 0 $ show err
_ -> putIfVerbose opts 3 $ "reparsed: " ++ f
when (hasPrfOut opts && verbose opts >= 3) $ let
(axs, rest) = partition ( \ s -> isAxiom s || isDef s) sens
tnf = tn ++ "_" ++ senAttr s
tf = fp ++ "_" ++ senAttr s ++ ".thy"
in writeVerbFile opts tf $ shows
(printIsaTheory tnf sign $ s : axs) "\n") rest
writeTheory :: HetcatsOpts -> FilePath -> GlobalAnnos -> G_theory -> LibName
-> SIMPLE_ID -> OutType -> IO ()
writeTheory opts filePrefix ga
raw_gTh@(G_theory lid (ExtSign sign0 _) _ sens0 _) ln i ot =
let fp = filePrefix ++ "_" ++ show i
th = (sign0, toNamedList sens0)
ThyFile -> writeIsaFile opts filePrefix raw_gTh ln i
DfgFile c -> writeSoftFOL opts f raw_gTh ln i c 0 "DFG"
TPTPFile c -> writeSoftFOL opts f raw_gTh ln i c 1 "TPTP"
writeVerbFile opts f $ shows (
DG.printTh ga i raw_gTh) "\n"
else putIfVerbose opts 0 "printing theory delta is not implemented"
when (language_name lid == language_name VSE) $ do
(sign, sens) <- coerceBasicTheory lid VSE "" th
let (sign', sens') = addUniformRestr sign sens
lse = map (namedSenToSExpr sign') sens'
unless (null lse) $ writeVerbFile opts (fp ++ ".sexpr")
$ shows (prettySExpr $ SList lse) "\n"
writeVerbFile opts f $ shows (pretty $ signOf raw_gTh) "\n"
else putIfVerbose opts 0 "printing signature delta is not implemented"
when (language_name lid == language_name VSE) $ do
(sign, sens) <- coerceBasicTheory lid VSE "" th
let (sign', _sens') = addUniformRestr sign sens
writeVerbFile opts (f ++ ".sexpr")
$ shows (prettySExpr $ vseSignToSExpr sign') "\n"
HaskellOut -> case printModule raw_gTh of
putIfVerbose opts 0 $ "could not translate to Haskell file: " ++ f
Just d -> writeVerbFile opts f $ shows d "\n"
ComptableXml -> if language_name lid == language_name CASL then do
th2 <- coerceBasicTheory lid CASL "" th
let Result ds res = computeCompTable i th2
Just td -> writeVerbFile opts f $ tableXmlStr td
else putIfVerbose opts 0 $ "expected CASL theory for: " ++ f
OWLOut -> if language_name lid == language_name OWL then do
th2 <- coerceBasicTheory lid OWL "" th
let owltext = shows (printOWLBasicTheory th2) "\n"
case parse (basicSpec >> eof) f owltext of
Left err -> putIfVerbose opts 0 $ show err
_ -> putIfVerbose opts 3 $ "reparsed: " ++ f
writeVerbFile opts f owltext
else putIfVerbose opts 0 $ "expected OWL theory for: " ++ f
_ -> return () -- ignore other file types
modelSparQCheck :: HetcatsOpts -> G_theory -> SIMPLE_ID -> IO ()
modelSparQCheck opts gTh@(G_theory lid (ExtSign sign0 _) _ sens0 _) i =
case coerceBasicTheory lid CASL "" (sign0, toNamedList sens0) of
table <- parseSparQTableFromFile $ modelSparQ opts
Left _ -> putIfVerbose opts 0
$ "could not parse SparQTable from file: " ++ modelSparQ opts
Right y -> let Result d _ = modelCheck i th2 y in
if length d > 0 then showDiags opts {verbose = 2 } $ take 10 d
else putIfVerbose opts 0 "Modelcheck suceeded, no errors found"
putIfVerbose opts 0 $ "could not translate Theory to CASL:\n "
writeTheoryFiles :: HetcatsOpts -> [OutType] -> FilePath -> LibEnv
-> GlobalAnnos -> LibName -> SIMPLE_ID -> Int -> IO ()
writeTheoryFiles opts specOutTypes filePrefix lenv ga ln i n =
case computeTheory lenv ln n of
Nothing -> putIfVerbose opts 0 $ "could not compute theory of spec "
Result es mTh = if null tr then return (raw_gTh0, "") else do
comor <- lookupCompComorphism (map tokStr tr) logicGraph
tTh <- mapG_theory comor raw_gTh0
putIfVerbose opts 0 "could not translate theory"
Just (raw_gTh, tStr) -> do
putIfVerbose opts 2 $ "Translated using comorphism " ++ tStr
putIfVerbose opts 4 $ "Sublogic of " ++ show i ++ ": " ++
show (sublogicOfTh raw_gTh)
unless (modelSparQ opts == "") $
modelSparQCheck opts (theoremsToAxioms raw_gTh) i
mapM_ (writeTheory opts filePrefix ga raw_gTh ln i) specOutTypes
writeSpecFiles :: HetcatsOpts -> FilePath -> LibEnv -> LibName -> DGraph
writeSpecFiles opts file lenv ln dg = do
filePrefix = snd $ getFilePrefix opts file
specOutTypes = filter ( \ ot -> case ot of
ignore = null specOutTypes && modelSparQ opts == ""
mapM_ (writeLibEnv opts filePrefix lenv ln) $
if null $ dumpOpts opts then outTypes else EnvOut : outTypes
Just (SpecEntry (ExtGenSig _ (NodeSig n _))) ->
writeTheoryFiles opts specOutTypes filePrefix lenv ga ln i n
$ putIfVerbose opts 0 $ "Unknown spec name: " ++ show i
) $ if ignore then [] else
writeTheoryFiles opts specOutTypes filePrefix lenv ga ln
(genToken $ 'n' : show n) n)
$ if ignore || not allSpecs then [] else
SpecEntry (ExtGenSig _ (NodeSig n _)) -> n : l
doDump opts "GlobalAnnos" $ putStrLn $ showGlobalDoc ga ga ""
doDump opts "PrintStat" $ putStrLn $ printStatistics dg
doDump opts "DGraph" $ putStrLn $ showDoc dg ""
doDump opts "DuplicateDefEdges" $ let es = duplicateDefEdges dg in
unless (null es) $ print es
doDump opts "LogicGraph" $ putStrLn $ showDoc logicGraph ""
writeVerbFile opts (filePrefix ++ ".lenv") $