diff options
Diffstat (limited to 'Assignment2/src/DTMC.icl')
-rw-r--r-- | Assignment2/src/DTMC.icl | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/Assignment2/src/DTMC.icl b/Assignment2/src/DTMC.icl index 7c712e0..3b8b2a7 100644 --- a/Assignment2/src/DTMC.icl +++ b/Assignment2/src/DTMC.icl @@ -1,14 +1,21 @@ implementation module DTMC import StdArray +import StdBool import StdClass import StdFile +from StdFunc import o import StdInt import StdList import StdString +import StdTuple import Data.Error -from Data.Func import $ +from Data.Func import $, seqSt +import Data.List +import qualified Data.Map as M +from Data.Map import :: Map +import Data.Maybe import System.File import System.FilePath import Text @@ -24,24 +31,25 @@ parseDTMCFromLines lines # states = map parseState $ groupLines "\t" [] lines = { nr_states = toInt nr_states - , states = {s \\ s <- states} + , states = {Just s \\ s <- states} } where parseState :: ![String] -> State parseState [head:actions] = - { actions = map parseAction $ groupLines "\t\t" [] actions - , init = endsWith "init" head + { state_id = toInt $ trim $ head % (5,size head-1) + , transitions = 'M'.unions $ map (snd o parseAction) $ groupLines "\t\t" [] actions + , init = endsWith "init" head } where - parseAction :: ![String] -> Action + parseAction :: ![String] -> (!Int, !Map Int String) parseAction [head:transitions] = - { action_id = toInt (head % (8, size head-1)) - , transitions = map parseTransition transitions - } + ( toInt (head % (8, size head-1)) + , 'M'.fromList $ map parseTransition transitions + ) where - parseTransition :: !String -> Transition + parseTransition :: !String -> (!Int, !String) parseTransition s = case split " : " (trim s) of - [id:prob:_] -> {to_state=toInt id, probability=prob} + [id:prob:_] -> (toInt id, prob) groupLines :: !String ![String] ![String] -> [[String]] groupLines head current [] = [reverse current] @@ -49,3 +57,7 @@ where | startsWith head line = groupLines head [line:current] lines | isEmpty current = groupLines head [line] lines | otherwise = [reverse current:groupLines head [line] lines] + +Start w +# (dtmc,w) = parseDTMC "die.drn" w += stateElimination dtmc |