Translate.hs revision b63d1c8a4e0ea8b68f91c1c1b35b1b735a290113
14650c9e129d8dc51ed55b2edc6ec27d9f0f6d00Kristina SojakovaModule : $Header$
14650c9e129d8dc51ed55b2edc6ec27d9f0f6d00Kristina SojakovaDescription : create legal THF mixfix identifier
b43458b4d81f7451112cecbd757f3a05216e7088Kristina SojakovaCopyright : (c) A. Tsogias, DFKI Bremen 2011
14650c9e129d8dc51ed55b2edc6ec27d9f0f6d00Kristina SojakovaLicense : GPLv2 or higher, see LICENSE.txt
98890889ffb2e8f6f722b00e265a211f13b5a861Corneliu-Claudiu ProdescuMaintainer : Alexis.Tsogias@dfki.de
14650c9e129d8dc51ed55b2edc6ec27d9f0f6d00Kristina SojakovaStability : provisional
14650c9e129d8dc51ed55b2edc6ec27d9f0f6d00Kristina SojakovaPortability : portable
14650c9e129d8dc51ed55b2edc6ec27d9f0f6d00Kristina Sojakovatranslate 'Id' to THF Constant
14650c9e129d8dc51ed55b2edc6ec27d9f0f6d00Kristina Sojakovaimport qualified Common.ProofUtils as CM (charMap)
b2e01ef1b5d4c7a62260eb792291e8e1b10e545bIulia Ignatovimport THF.As as THFAs
ccaa75089b23c0f043cdbd4001cba4e076ca4fd3Kristina Sojakovaimport qualified Data.Map as Map
d2786879b4733fd4886a5b654f7c6de1d234f638Kristina SojakovamkTypesName :: THFAs.Constant -> THFAs.Name
14650c9e129d8dc51ed55b2edc6ec27d9f0f6d00Kristina SojakovamkTypesName c = case c of
14650c9e129d8dc51ed55b2edc6ec27d9f0f6d00Kristina Sojakova A_Lower_Word w -> N_Atomic_Word $ A_Lower_Word
14650c9e129d8dc51ed55b2edc6ec27d9f0f6d00Kristina Sojakova $ mkSimpleId ("type_" ++ show w)
14650c9e129d8dc51ed55b2edc6ec27d9f0f6d00Kristina Sojakova A_Single_Quoted s -> N_Atomic_Word $ A_Single_Quoted
14650c9e129d8dc51ed55b2edc6ec27d9f0f6d00Kristina Sojakova $ mkSimpleId ("type_" ++ show s)
b43458b4d81f7451112cecbd757f3a05216e7088Kristina SojakovamkConstsName :: THFAs.Constant -> THFAs.Name
14650c9e129d8dc51ed55b2edc6ec27d9f0f6d00Kristina SojakovamkConstsName c = case c of
14650c9e129d8dc51ed55b2edc6ec27d9f0f6d00Kristina Sojakova A_Lower_Word w -> N_Atomic_Word $ A_Lower_Word
14650c9e129d8dc51ed55b2edc6ec27d9f0f6d00Kristina Sojakova $ mkSimpleId ("const_" ++ show w)
14650c9e129d8dc51ed55b2edc6ec27d9f0f6d00Kristina Sojakova A_Single_Quoted s -> N_Atomic_Word $ A_Single_Quoted
14650c9e129d8dc51ed55b2edc6ec27d9f0f6d00Kristina Sojakova $ mkSimpleId ("const_" ++ show s)
ccaa75089b23c0f043cdbd4001cba4e076ca4fd3Kristina SojakovamkDefName c = case c of
ccaa75089b23c0f043cdbd4001cba4e076ca4fd3Kristina Sojakova A_Lower_Word w -> N_Atomic_Word $ A_Lower_Word
ccaa75089b23c0f043cdbd4001cba4e076ca4fd3Kristina Sojakova $ mkSimpleId ("def_" ++ show w)
ccaa75089b23c0f043cdbd4001cba4e076ca4fd3Kristina Sojakova A_Single_Quoted s -> N_Atomic_Word $ A_Single_Quoted
14650c9e129d8dc51ed55b2edc6ec27d9f0f6d00Kristina Sojakova $ mkSimpleId ("def_" ++ show s)
d2786879b4733fd4886a5b654f7c6de1d234f638Kristina SojakovatransTypeId :: Id -> Result THFAs.Constant
d2786879b4733fd4886a5b654f7c6de1d234f638Kristina SojakovatransTypeId id1 = case maybeElem id1 preDefHCTypeIds of
d2786879b4733fd4886a5b654f7c6de1d234f638Kristina Sojakova Just res -> return $ stringToConstant res
d2786879b4733fd4886a5b654f7c6de1d234f638Kristina Sojakova Nothing -> case transToTHFString $ "x_" ++ show id1 of
d2786879b4733fd4886a5b654f7c6de1d234f638Kristina Sojakova Just s -> return $ stringToConstant s
a669e4685b32ff5ca1bca785eacc5e30a545b010Christian Maeder Nothing -> fatal_error ("Unable to translate " ++ show id1 ++
d2786879b4733fd4886a5b654f7c6de1d234f638Kristina Sojakova " into a THF valide Constant.") nullRange
ccaa75089b23c0f043cdbd4001cba4e076ca4fd3Kristina SojakovatransAssumpId :: Id -> Result THFAs.Constant
ccaa75089b23c0f043cdbd4001cba4e076ca4fd3Kristina SojakovatransAssumpId id1 = case maybeElem id1 preDefHCAssumpIds of
ccaa75089b23c0f043cdbd4001cba4e076ca4fd3Kristina Sojakova Just res -> return $ stringToConstant res
ccaa75089b23c0f043cdbd4001cba4e076ca4fd3Kristina Sojakova Nothing -> case transToTHFString $ show id1 of
ccaa75089b23c0f043cdbd4001cba4e076ca4fd3Kristina Sojakova Just s -> return $ stringToConstant s
ccaa75089b23c0f043cdbd4001cba4e076ca4fd3Kristina Sojakova Nothing -> fatal_error ("Unable to translate " ++ show id1 ++
ccaa75089b23c0f043cdbd4001cba4e076ca4fd3Kristina Sojakova " into a THF valide Constant.") nullRange
ccaa75089b23c0f043cdbd4001cba4e076ca4fd3Kristina SojakovatransAssumpsId :: Id -> Int -> Result THFAs.Constant
abd5fc85dc7e19b1614890182436940e922963a4Kristina SojakovatransAssumpsId id1 int = if int == 1 then transAssumpId id1 else
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova case transToTHFString $ show id1 of
14650c9e129d8dc51ed55b2edc6ec27d9f0f6d00Kristina Sojakova Just s -> return $ stringToConstant (s ++ show int)
ccaa75089b23c0f043cdbd4001cba4e076ca4fd3Kristina Sojakova Nothing -> fatal_error ("Unable to translate " ++ show id1 ++
ccaa75089b23c0f043cdbd4001cba4e076ca4fd3Kristina Sojakova " into a THF valide Constant.") nullRange
ccaa75089b23c0f043cdbd4001cba4e076ca4fd3Kristina SojakovastringToConstant :: String -> THFAs.Constant
ccaa75089b23c0f043cdbd4001cba4e076ca4fd3Kristina SojakovastringToConstant = A_Lower_Word . stringToLowerWord
ccaa75089b23c0f043cdbd4001cba4e076ca4fd3Kristina SojakovastringToLowerWord :: String -> Token
ccaa75089b23c0f043cdbd4001cba4e076ca4fd3Kristina SojakovastringToLowerWord = mkSimpleId . \ s -> case s of
abd5fc85dc7e19b1614890182436940e922963a4Kristina Sojakova c : r -> if isLower c then s else 'x' : c : r
80d2ec8f37d5ddec13c14b17b1bab01e9c94630aChristian MaederstringToVariable :: String -> String
a669e4685b32ff5ca1bca785eacc5e30a545b010Christian MaederstringToVariable s = case s of
d71bb9deea089887b4fd829c5b766e7e4de9f204Kristina Sojakova c : r -> if isUpper c then s else toUpper c : 'x' : r
a669e4685b32ff5ca1bca785eacc5e30a545b010Christian MaedertransVarId :: Id -> Result Token
d2786879b4733fd4886a5b654f7c6de1d234f638Kristina SojakovatransVarId id1 = case transToTHFString $ show id1 of
d2786879b4733fd4886a5b654f7c6de1d234f638Kristina Sojakova Just s -> return $ mkSimpleId $ stringToVariable s
d2786879b4733fd4886a5b654f7c6de1d234f638Kristina Sojakova Nothing -> fatal_error ("Unable to translate " ++ show id1 ++
abd5fc85dc7e19b1614890182436940e922963a4Kristina Sojakova " into a THF valide Variable.") nullRange
b3bacd257ffcdd346b70ab690f03b28ad5f33fdcKristina SojakovatransToTHFString :: String -> Maybe String
a669e4685b32ff5ca1bca785eacc5e30a545b010Christian MaedertransToTHFString = transToTHFStringAux True
b3bacd257ffcdd346b70ab690f03b28ad5f33fdcKristina SojakovatransToTHFStringAux :: Bool -> String -> Maybe String
a669e4685b32ff5ca1bca785eacc5e30a545b010Christian MaedertransToTHFStringAux first s = case s of
abd5fc85dc7e19b1614890182436940e922963a4Kristina Sojakova x = 'x' -- escape character
168d206b4e5fd436c98239a1b6629c651f54c8eeKristina Sojakova rest = transToTHFStringAux False rc
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova if isTHFChar c
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova then if first && isDigit c || c == x then fmap ([x, c] ++) rest else
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova fmap (c :) rest
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova else case Map.lookup c charMap of
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova Just res -> fmap (res ++) rest
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina Sojakova Nothing -> Nothing
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina SojakovaisTHFChar :: Char -> Bool
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina SojakovaisTHFChar c = isAlphaNum c && isAscii c || c == '_'
abd5fc85dc7e19b1614890182436940e922963a4Kristina SojakovaisLowerTHFChar :: Char -> Bool
e8dd447a2aa5fbac10668749dfe4142c05ec3d7dKristina SojakovaisLowerTHFChar c = isLower c && isAscii c
5e35940c3516ccea02caa0450d2b075de0106fa5Kristina SojakovapreDefHCTypeIds :: Map.Map Id String
5e35940c3516ccea02caa0450d2b075de0106fa5Kristina SojakovapreDefHCTypeIds = Map.fromList
5e35940c3516ccea02caa0450d2b075de0106fa5Kristina Sojakova [ (logId, "hct" ++ show logId)
2cb6df4f21c52732336579a79f7e5d28299b3500Iulia Ignatov , (predTypeId, "hct" ++ show predTypeId)
2cb6df4f21c52732336579a79f7e5d28299b3500Iulia Ignatov , (unitTypeId, "hct" ++ show unitTypeId)
b2e01ef1b5d4c7a62260eb792291e8e1b10e545bIulia Ignatov , (lazyTypeId, "hctLazy")
b2e01ef1b5d4c7a62260eb792291e8e1b10e545bIulia Ignatov , (arrowId FunArr, "hct__FunArr__")
preDefHCAssumpIds :: Map.Map Id String
preDefHCAssumpIds = Map.fromList
maybeElem :: Id -> Map.Map Id a -> Maybe a
maybeElem id1 m = helper id1 (Map.toList m)
charMap :: Map.Map Char String
charMap = Map.insert '\'' "Apostrophe"
. Map.insert '.' "Dot"