Show
Ignore:
Timestamp:
05.01.2009 15:46:06 (11 months ago)
Author:
csliam
Message:

Large commit - improved static analysis of cspcasl and translation of cspcasl to isabelle

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/CspCASL/SignCSP.hs

    r10827 r11215  
    1717module CspCASL.SignCSP where 
    1818 
    19 import CspCASL.AS_CspCASL_Process (CHANNEL_NAME, PROCESS_NAME) 
    20  
    21 import CASL.AS_Basic_CASL (SORT) 
     19import CspCASL.AS_CspCASL_Process (CHANNEL_NAME, PROCESS_NAME, 
     20    PROCESS(..), CommAlpha(..), CommType(..), TypedChanName(..)) 
     21 
     22import CspCASL.AS_CspCASL () 
     23import CspCASL.Print_CspCASL 
     24 
     25import CASL.AS_Basic_CASL (FORMULA, SORT) 
    2226import CASL.Sign (emptySign, Sign, extendedInfo, sortRel) 
    2327import CASL.Morphism (Morphism) 
    2428 
    25 import qualified Common.Doc as Doc 
    26 import qualified Common.DocUtils as DocUtils 
    27 import Common.Id (Id, SIMPLE_ID) 
     29import Common.AS_Annotation (Named) 
     30 
     31import Common.Doc 
     32import Common.DocUtils 
     33 
     34import Common.Id (Id, SIMPLE_ID, mkSimpleId, nullRange) 
    2835import Common.Lib.Rel (predecessors) 
    2936import Common.Result 
     
    3845                   deriving (Eq, Show) 
    3946 
    40 -- | A process communication alphabet consists of a set of sort names 
    41 -- and typed channel names. 
    42 data TypedChanName = TypedChanName CHANNEL_NAME SORT 
    43                      deriving (Eq, Ord, Show) 
    44 data CommType = CommTypeSort SORT 
    45               | CommTypeChan TypedChanName 
    46                 deriving (Eq, Ord) 
    47 instance Show CommType where 
    48     show (CommTypeSort s) = show s 
    49     show (CommTypeChan (TypedChanName c s)) = show (c, s) 
    50  
    51 type CommAlpha = Set.Set CommType 
    52  
    5347type ChanNameMap = Map.Map CHANNEL_NAME SORT 
    5448type ProcNameMap = Map.Map PROCESS_NAME ProcProfile 
    5549type ProcVarMap = Map.Map SIMPLE_ID SORT 
     50type ProcVarList = [(SIMPLE_ID, SORT)] 
    5651 
    5752-- Close a communication alphabet under CASL subsort 
     
    9994    { chans :: ChanNameMap 
    10095    , procSet :: ProcNameMap 
     96    -- | Added for uniformity to the CASL static analysis. After 
     97    --   static analysis this is the empty list. 
     98    , ccSentences :: [Named CspCASLSen] 
    10199    } deriving (Eq, Show) 
    102100 
     
    107105ccSig2CASLSign :: CspCASLSign -> Sign () () 
    108106ccSig2CASLSign sigma = sigma { extendedInfo = () } 
     107 
     108ccSig2CspSign :: CspCASLSign -> CspSign 
     109ccSig2CspSign sigma = extendedInfo sigma 
    109110 
    110111-- | Empty CspCASL signature. 
     
    117118    { chans = Map.empty 
    118119    , procSet = Map.empty 
     120    , ccSentences =[] 
    119121    } 
    120122 
     
    170172 
    171173-- dummy instances, need to be elaborated! 
    172 instance DocUtils.Pretty CspSign where 
    173   pretty = Doc.text . show 
    174 instance DocUtils.Pretty CspAddMorphism where 
    175   pretty = Doc.text . show 
     174instance Pretty CspSign where 
     175  pretty = text . show 
     176instance Pretty CspAddMorphism where 
     177  pretty = text . show 
     178 
     179-- Sentences 
     180 
     181-- A CspCASl senetence is either a CASL formula or a Procsses 
     182-- equation. A process equation has on the LHS a process name, a list 
     183-- of parameters which are qualified variables (which are terms), a 
     184-- constituent communication alphabet and finally on the RHS a fully 
     185-- qualified process. 
     186data CspCASLSen = CASLSen (FORMULA ()) 
     187                | ProcessEq PROCESS_NAME ProcVarList CommAlpha PROCESS 
     188                  deriving (Show, Eq, Ord) 
     189 
     190instance Pretty CspCASLSen where 
     191    -- Not implemented yet - the pretty printing of the casl sentences 
     192    pretty(CASLSen _) = text "Pretty printing for CASLSen not implemented yet" 
     193    pretty(ProcessEq pn varList alpha proc) = 
     194        let varDoc = if (null varList) 
     195                     then empty 
     196                     else parens $ sepByCommas $ map pretty (map fst varList) 
     197        in pretty pn <+> varDoc <+> equals <+> pretty proc 
     198 
     199emptyCCSen :: CspCASLSen 
     200emptyCCSen = 
     201    let emptyProcName = mkSimpleId "empty" 
     202        emptyVarList = [] 
     203        emptyAlphabet = Set.empty 
     204        emptyProc = Skip nullRange 
     205    in ProcessEq emptyProcName emptyVarList emptyAlphabet emptyProc 
     206 
     207isCASLSen :: CspCASLSen -> Bool 
     208isCASLSen (CASLSen _) = True 
     209isCASLSen _           = False 
     210 
     211isProcessEq :: CspCASLSen -> Bool 
     212isProcessEq (ProcessEq _ _ _ _) = True 
     213isProcessEq _ = False 
     214