-- ----------------------------------------------------------------------------- -- -- Info.hs, part of Alex -- -- (c) Simon Marlow 2003 -- -- Generate a human-readable rendition of the state machine. -- -- ----------------------------------------------------------------------------} module Info (infoDFA) where import AbsSyn import qualified Map import Util ( str, nl, interleave_shows, char, ljustify ) -- ----------------------------------------------------------------------------- -- Generate a human readable dump of the state machine infoDFA :: Int -> String -> DFA SNum Code -> ShowS infoDFA n func_nm dfa = str "Scanner : " . str func_nm . nl . str "States : " . shows (length dfa_list) . nl . nl . infoDFA dfa where dfa_list = Map.toAscList (dfa_states dfa) infoDFA dfa = interleave_shows nl (map infoStateN dfa_list) infoStateN (i,s) = str "State " . shows i . nl . infoState s . nl infoState :: State SNum Code -> ShowS infoState (State accs out) = infoArr out . nl -- . str ("\tDefault -> ") . shows df infoArr out = char '\t' . interleave_shows (str "\n\t") (map infoTransition (Map.toAscList out)) infoTransition (char,state) = str (ljustify 8 (show char)) . str " -> " . shows state -- outputAccs :: [Accept Code] -> ShowS -- outputAccs accs -- = brack (interleave_shows (char ',') (map (paren.outputAcc) accs)) -- -- outputAcc (Acc prio act scs lctx rctx) -- = str "Acc " . shows prio . space -- . paren (str act) . space -- . shows scs . space -- . outputLCtx lctx . space -- . shows rctx -- -- outputLCtx Nothing -- = str "Nothing" -- outputLCtx (Just set) -- = str "Just " . paren (outputArr (charSetToArray set)) -- -- outputArr arr -- = str "Array.array " . shows (bounds arr) . space -- . shows (assocs arr)