| 19 | | import CspCASL.AS_CspCASL_Process (CHANNEL_NAME, PROCESS_NAME) |
| 20 | | |
| 21 | | import CASL.AS_Basic_CASL (SORT) |
| | 19 | import CspCASL.AS_CspCASL_Process (CHANNEL_NAME, PROCESS_NAME, |
| | 20 | PROCESS(..), CommAlpha(..), CommType(..), TypedChanName(..)) |
| | 21 | |
| | 22 | import CspCASL.AS_CspCASL () |
| | 23 | import CspCASL.Print_CspCASL |
| | 24 | |
| | 25 | import CASL.AS_Basic_CASL (FORMULA, SORT) |
| 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 | | |
| 172 | | instance DocUtils.Pretty CspSign where |
| 173 | | pretty = Doc.text . show |
| 174 | | instance DocUtils.Pretty CspAddMorphism where |
| 175 | | pretty = Doc.text . show |
| | 174 | instance Pretty CspSign where |
| | 175 | pretty = text . show |
| | 176 | instance 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. |
| | 186 | data CspCASLSen = CASLSen (FORMULA ()) |
| | 187 | | ProcessEq PROCESS_NAME ProcVarList CommAlpha PROCESS |
| | 188 | deriving (Show, Eq, Ord) |
| | 189 | |
| | 190 | instance 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 | |
| | 199 | emptyCCSen :: CspCASLSen |
| | 200 | emptyCCSen = |
| | 201 | let emptyProcName = mkSimpleId "empty" |
| | 202 | emptyVarList = [] |
| | 203 | emptyAlphabet = Set.empty |
| | 204 | emptyProc = Skip nullRange |
| | 205 | in ProcessEq emptyProcName emptyVarList emptyAlphabet emptyProc |
| | 206 | |
| | 207 | isCASLSen :: CspCASLSen -> Bool |
| | 208 | isCASLSen (CASLSen _) = True |
| | 209 | isCASLSen _ = False |
| | 210 | |
| | 211 | isProcessEq :: CspCASLSen -> Bool |
| | 212 | isProcessEq (ProcessEq _ _ _ _) = True |
| | 213 | isProcessEq _ = False |
| | 214 | |