CSPM-FiringRules-0.3.0.3: src/CSPM/FiringRules/Trace.hs
-----------------------------------------------------------------------------
-- |
-- Module : CSPM.FiringRules.Trace
-- Copyright : (c) Fontaine 2010
-- License : BSD
--
-- Maintainer : fontaine@cs.uni-duesseldorf.de
-- Stability : experimental
-- Portability : GHC-only
--
-- A very rudimentary process tracer for debugging and testing.
-- Prints the current process and the possible transitions to stdout
-- and lets the user select a transition by typing to stdin.
--
-----------------------------------------------------------------------------
{-# LANGUAGE ScopedTypeVariables, TypeFamilies #-}
module CSPM.FiringRules.Trace
where
import CSPM.CoreLanguage
import CSPM.FiringRules.Rules
import CSPM.FiringRules.Verifier (viewProcAfter,viewEvent)
import CSPM.FiringRules.FieldConstraints (computeTransitions)
import CSPM.FiringRules.HelperClasses
-- | A simplistic interactive CSP-M tracer.
-- It prints all events offered by a Proccess to stdout and
-- promts the user for the event to perform.
trace :: forall i e. (FShow i, ShowTTE e , CSP2 i, e ~ TTE i)
=> Sigma i -> Process i -> IO ()
trace events process = do
-- putStrLn "Process :"
-- putStr $ show $ hash process
let rules = computeTransitions events process
if null rules
then putStrLn "deadlock state"
else do
sequence_ $ zipWith printTrans [0..] rules
putStrLn "Select a Transition "
i <- readLn
trace events (viewProcAfter (rules !! i))
where
printTrans :: Int -> Rule i -> IO ()
printTrans nr r = do
putStr (show nr ++ " : ")
putStrLn ""
-- putStrLn $ show r
putStr $ showTTE $ viewEvent r
putStrLn ""