root/trunk/CspCASL/Morphism.hs @ 11231

Revision 11231, 1.9 kB (checked in by csliam, 11 months ago)

Static analysis of CspCASL now adds channel names and process names to the collected symbols (stored in the CASL signature)

Line 
1{- |
2Module      :  $Header$
3Description :  Symbols and signature morphisms for the CspCASL logic
4Copyright   :  (c) Liam O'Reilly, Markus Roggenbach, Swansea University 2008
5License     :  similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
6
7Maintainer  :  csliam@swansea.ac.uk
8Stability   :  provisional
9Portability :  portable
10
11Symbols and signature morphisms for the CASL logic
12-}
13
14module CspCASL.Morphism ( symOf,
15                          makeChannelNameSymbol,
16                          makeProcNameSymbol
17                        ) where
18
19import CASL.Sign
20import qualified CASL.Morphism as CASL_Morphism
21import Common.Id(simpleIdToId)
22import CspCASL.AS_CspCASL_Process (CHANNEL_NAME, PROCESS_NAME)
23import CspCASL.SignCSP
24
25import qualified Data.Map as Map
26import qualified Data.Set as Set
27
28channelNameSymbType :: SymbType
29channelNameSymbType = OtherTypeKind "CHANNEL_KIND"
30
31processNameSymbType :: SymbType
32processNameSymbType = OtherTypeKind "PROC_NAME_KIND"
33
34-- | Calculate the set of symbols for a CspCASL signature
35symOf :: CspCASLSign -> Set.Set Symbol
36symOf sigma =
37    let caslSymbols = CASL_Morphism.symOf sigma -- Get CASL symbols
38        cspExt = extendedInfo sigma
39        chanNames = Set.fromList $ Map.keys (chans cspExt) -- Get the channel names
40        procNames = Set.fromList $ Map.keys (procSet cspExt) -- Get the process names
41        -- Make channel symbols from names
42        chanNameSymbols = Set.map makeChannelNameSymbol chanNames
43        -- Make process name symbols from names
44        procNameSymbols = Set.map makeProcNameSymbol procNames
45    in Set.unions [caslSymbols, chanNameSymbols, procNameSymbols]
46
47makeChannelNameSymbol :: CHANNEL_NAME -> Symbol
48makeChannelNameSymbol c =
49    Symbol {symName = simpleIdToId c, symbType = channelNameSymbType}
50
51makeProcNameSymbol :: PROCESS_NAME -> Symbol
52makeProcNameSymbol p =
53    Symbol {symName = simpleIdToId p, symbType = processNameSymbType}
Note: See TracBrowser for help on using the browser.