77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett{- |
e9458b1a7a19a63aa4c179f9ab20f4d50681c168Jens ElknerModule : ./CspCASL/Core_CspCASL.hs
77998f1139e55978f6288e905cd16565f2e20298Andy GimblettDescription : Conversion to core CspCASL
77998f1139e55978f6288e905cd16565f2e20298Andy GimblettCopyright : (c) Andy Gimblett and Uni Bremen 2006
98890889ffb2e8f6f722b00e265a211f13b5a861Corneliu-Claudiu ProdescuLicense : GPLv2 or higher, see LICENSE.txt
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett
77998f1139e55978f6288e905cd16565f2e20298Andy GimblettMaintainer : a.m.gimblett@swansea.ac.uk
77998f1139e55978f6288e905cd16565f2e20298Andy GimblettStability : provisional
77998f1139e55978f6288e905cd16565f2e20298Andy GimblettPortability : portable
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett
77998f1139e55978f6288e905cd16565f2e20298Andy GimblettConverting sugared CspCASL to core CspCASL.
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett
77998f1139e55978f6288e905cd16565f2e20298Andy GimblettThe following process types are core:
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett Skip
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett Stop
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett PrefixProcess ev p
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett ExternalPrefixProcess v es p
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett InternalPrefixProcess v es p
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett Sequential p q
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett ExternalChoice p q
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett InternalChoice p q
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett GeneralisedParallel p es q
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett Hiding p es
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett RelationalRenaming p RENAMING
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett NamedProcess pn evs
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett ConditionalProcess CSP_FORMULA p q
dd0d7990e6ce74fe7531c1c05eb672dd940a8be7Christian Maeder
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett (Also the interrupt operator should be added, and core?)
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett-}
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblettmodule CspCASL.Core_CspCASL (basicToCore) where
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett
06dd4e7c29f33f6122a910719e3bd9062256e397Andy Gimblettimport Common.Id
06dd4e7c29f33f6122a910719e3bd9062256e397Andy Gimblett
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblettimport CspCASL.AS_CspCASL
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblettimport CspCASL.AS_CspCASL_Process
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett
77998f1139e55978f6288e905cd16565f2e20298Andy GimblettbasicToCore :: CspBasicSpec -> CspBasicSpec
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von SchroederbasicToCore c = CspBasicSpec (channels c) core_procs
c052e3ee4a53ee3a2da829aa142fd596ef6c9e3dAndy Gimblett where core_procs = map procEqToCore (proc_items c)
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder procEqToCore (Proc_Eq pn p) = Proc_Eq pn (procToCore p)
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder procEqToCore x = x
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett
77998f1139e55978f6288e905cd16565f2e20298Andy GimblettprocToCore :: PROCESS -> PROCESS
5fdf8899e78fea735c30253322eb7715646317e4Andy GimblettprocToCore proc = let p' = procToCore in case proc of
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett -- First the core operators: we just need to recurse.
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder (Skip r) -> Skip r
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder (Stop r) -> Stop r
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder (PrefixProcess ev p r) -> PrefixProcess ev (p' p) r
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder (ExternalPrefixProcess v es p r) -> ExternalPrefixProcess v es (p' p) r
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder (InternalPrefixProcess v es p r) -> InternalPrefixProcess v es (p' p) r
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder (Sequential p q r) -> Sequential (p' p) (p' q) r
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder (ExternalChoice p q r) -> ExternalChoice (p' p) (p' q) r
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder (InternalChoice p q r) -> InternalChoice (p' p) (p' q) r
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder (GeneralisedParallel p es q r) -> GeneralisedParallel (p' p) es (p' q) r
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder (Hiding p es r) -> Hiding (p' p) es r
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder (RelationalRenaming p rn r) -> RelationalRenaming (p' p) rn r
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder (NamedProcess pn evs r) -> NamedProcess pn evs r
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder (ConditionalProcess f p q r) -> ConditionalProcess f (p' p) (p' q) r
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett -- Non-core, done.
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder (Interleaving p q r) -> GeneralisedParallel (p' p
5858e6262048894b0e933b547852f04aed009b58Andy Gimblett (EventSet [] nullRange) (p' q) r)
77998f1139e55978f6288e905cd16565f2e20298Andy Gimblett -- Non-core, not done yet.
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder (Div r) -> Div r
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder (Run es r) -> Run es r
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder (Chaos es r) -> Chaos es r
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder (SynchronousParallel p q r) -> SynchronousParallel (p' p) (p' q) r
06dd4e7c29f33f6122a910719e3bd9062256e397Andy Gimblett (AlphabetisedParallel p esp esq q r) ->
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder AlphabetisedParallel (p' p) esp esq (p' q) r