| 1 | {- | |
|---|
| 2 | Module : $Id$ |
|---|
| 3 | Description : Abstract syntax of CSP-CASL processes |
|---|
| 4 | Copyright : (c) Markus Roggenbach and Till Mossakowski and Uni Bremen 2004 |
|---|
| 5 | License : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt |
|---|
| 6 | |
|---|
| 7 | Maintainer : a.m.gimblett@swan.ac.uk |
|---|
| 8 | Stability : provisional |
|---|
| 9 | Portability : portable |
|---|
| 10 | |
|---|
| 11 | Abstract syntax of CSP-CASL processes. |
|---|
| 12 | |
|---|
| 13 | -} |
|---|
| 14 | |
|---|
| 15 | module CspCASL.AS_CspCASL_Process ( |
|---|
| 16 | CHANNEL_NAME, |
|---|
| 17 | COMM_TYPE, |
|---|
| 18 | EVENT(..), |
|---|
| 19 | EVENT_SET(..), |
|---|
| 20 | PROCESS(..), |
|---|
| 21 | PROCESS_NAME, |
|---|
| 22 | RENAMING, |
|---|
| 23 | ) where |
|---|
| 24 | |
|---|
| 25 | import CASL.AS_Basic_CASL (FORMULA, SORT, TERM, VAR) |
|---|
| 26 | import Common.Id |
|---|
| 27 | |
|---|
| 28 | -- DrIFT command |
|---|
| 29 | {-! global: GetRange !-} |
|---|
| 30 | |
|---|
| 31 | data EVENT |
|---|
| 32 | = TermEvent (TERM ()) Range |
|---|
| 33 | | ChanSend CHANNEL_NAME (TERM ()) Range |
|---|
| 34 | | ChanNonDetSend CHANNEL_NAME VAR SORT Range |
|---|
| 35 | | ChanRecv CHANNEL_NAME VAR SORT Range |
|---|
| 36 | deriving (Show,Ord, Eq) |
|---|
| 37 | |
|---|
| 38 | |
|---|
| 39 | -- |Event sets are sets of communication types. |
|---|
| 40 | |
|---|
| 41 | data EVENT_SET = EventSet [COMM_TYPE] Range |
|---|
| 42 | deriving (Show,Ord, Eq) |
|---|
| 43 | |
|---|
| 44 | |
|---|
| 45 | -- |CSP renamings are predicate names or op names. |
|---|
| 46 | |
|---|
| 47 | type RENAMING = [Id] |
|---|
| 48 | |
|---|
| 49 | |
|---|
| 50 | type CHANNEL_NAME = SIMPLE_ID |
|---|
| 51 | |
|---|
| 52 | type PROCESS_NAME = SIMPLE_ID |
|---|
| 53 | |
|---|
| 54 | type COMM_TYPE = SIMPLE_ID |
|---|
| 55 | |
|---|
| 56 | |
|---|
| 57 | -- |CSP-CASL process expressions. |
|---|
| 58 | |
|---|
| 59 | data PROCESS |
|---|
| 60 | -- | @Skip@ - Terminate immediately |
|---|
| 61 | = Skip Range |
|---|
| 62 | -- | @Stop@ - Do nothing |
|---|
| 63 | | Stop Range |
|---|
| 64 | -- | @div@ - Divergence |
|---|
| 65 | | Div Range |
|---|
| 66 | -- | @Run es@ - Accept any event in es, forever |
|---|
| 67 | | Run EVENT_SET Range |
|---|
| 68 | -- | @Chaos es@ - Accept\/refuse any event in es, forever |
|---|
| 69 | | Chaos EVENT_SET Range |
|---|
| 70 | -- | @es -> p@ - Prefix process |
|---|
| 71 | | PrefixProcess EVENT PROCESS Range |
|---|
| 72 | -- | @[] var : es -> p@ - External nondeterministic prefix choice |
|---|
| 73 | | ExternalPrefixProcess VAR SORT PROCESS Range |
|---|
| 74 | -- | @|~| var : es -> p@ - Internal nondeterministic prefix choice |
|---|
| 75 | | InternalPrefixProcess VAR SORT PROCESS Range |
|---|
| 76 | -- | @p ; q@ - Sequential process |
|---|
| 77 | | Sequential PROCESS PROCESS Range |
|---|
| 78 | -- | @p [] q@ - External choice |
|---|
| 79 | | ExternalChoice PROCESS PROCESS Range |
|---|
| 80 | -- | @p |~| q@ - Internal choice |
|---|
| 81 | | InternalChoice PROCESS PROCESS Range |
|---|
| 82 | -- | @p ||| q@ - Interleaving |
|---|
| 83 | | Interleaving PROCESS PROCESS Range |
|---|
| 84 | -- | @p || q @ - Synchronous parallel |
|---|
| 85 | | SynchronousParallel PROCESS PROCESS Range |
|---|
| 86 | -- | @p [| a |] q@ - Generalised parallel |
|---|
| 87 | | GeneralisedParallel PROCESS EVENT_SET PROCESS Range |
|---|
| 88 | -- | @p [ a || b ] q@ - Alphabetised parallel |
|---|
| 89 | | AlphabetisedParallel PROCESS EVENT_SET EVENT_SET PROCESS Range |
|---|
| 90 | -- | @p \\ es@ - Hiding |
|---|
| 91 | | Hiding PROCESS EVENT_SET Range |
|---|
| 92 | -- | @p [[r]]@ - Renaming |
|---|
| 93 | | RenamingProcess PROCESS RENAMING Range |
|---|
| 94 | -- | @if f then p else q@ - Conditional |
|---|
| 95 | | ConditionalProcess (FORMULA ()) PROCESS PROCESS Range |
|---|
| 96 | -- | Named process |
|---|
| 97 | | NamedProcess PROCESS_NAME [TERM ()] Range |
|---|
| 98 | deriving (Eq, Ord, Show) |
|---|