module Info (infoDFA) where
import AbsSyn
import qualified Map
import qualified Data.IntMap as IntMap
import Util
import Data.Array
infoDFA :: Int -> String -> DFA SNum Code -> ShowS
infoDFA :: SNum -> String -> DFA SNum String -> ShowS
infoDFA SNum
_ String
func_nm DFA SNum String
dfa
= String -> ShowS
str String
"Scanner : " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
str String
func_nm ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS
nl
ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
str String
"States : " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SNum -> ShowS
forall a. Show a => a -> ShowS
shows ([(SNum, State SNum String)] -> SNum
forall (t :: * -> *) a. Foldable t => t a -> SNum
length [(SNum, State SNum String)]
dfa_list) ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS
nl
ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS
nl ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS
infoDFA'
where
dfa_list :: [(SNum, State SNum String)]
dfa_list = Map SNum (State SNum String) -> [(SNum, State SNum String)]
forall k a. Map k a -> [(k, a)]
Map.toAscList (DFA SNum String -> Map SNum (State SNum String)
forall s a. DFA s a -> Map s (State s a)
dfa_states DFA SNum String
dfa)
infoDFA' :: ShowS
infoDFA' = ShowS -> [ShowS] -> ShowS
interleave_shows ShowS
nl (((SNum, State SNum String) -> ShowS)
-> [(SNum, State SNum String)] -> [ShowS]
forall a b. (a -> b) -> [a] -> [b]
map (SNum, State SNum String) -> ShowS
forall {a}. Show a => (a, State SNum String) -> ShowS
infoStateN [(SNum, State SNum String)]
dfa_list)
infoStateN :: (a, State SNum String) -> ShowS
infoStateN (a
i,State SNum String
s) = String -> ShowS
str String
"State " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> ShowS
forall a. Show a => a -> ShowS
shows a
i ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS
nl ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. State SNum String -> ShowS
infoState State SNum String
s
infoState :: State SNum Code -> ShowS
infoState :: State SNum String -> ShowS
infoState (State [Accept String]
accs IntMap SNum
out)
= (ShowS -> ShowS -> ShowS) -> ShowS -> [ShowS] -> ShowS
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
(.) ShowS
forall a. a -> a
id ((Accept String -> ShowS) -> [Accept String] -> [ShowS]
forall a b. (a -> b) -> [a] -> [b]
map Accept String -> ShowS
infoAccept [Accept String]
accs)
ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. IntMap SNum -> ShowS
forall {a}. Show a => IntMap a -> ShowS
infoArr IntMap SNum
out ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS
nl
infoArr :: IntMap a -> ShowS
infoArr IntMap a
out
= Char -> ShowS
char Char
'\t' ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS -> [ShowS] -> ShowS
interleave_shows (String -> ShowS
str String
"\n\t")
(((SNum, a) -> ShowS) -> [(SNum, a)] -> [ShowS]
forall a b. (a -> b) -> [a] -> [b]
map (SNum, a) -> ShowS
forall {a} {a}. (Show a, Show a) => (a, a) -> ShowS
infoTransition (IntMap a -> [(SNum, a)]
forall a. IntMap a -> [(SNum, a)]
IntMap.toAscList IntMap a
out))
infoAccept :: Accept String -> ShowS
infoAccept (Acc SNum
p Maybe String
act Maybe CharSet
lctx RightContext SNum
rctx)
= String -> ShowS
str String
"\tAccept" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS -> ShowS
paren (SNum -> ShowS
forall a. Show a => a -> ShowS
shows SNum
p) ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS
space
ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe CharSet -> ShowS
forall {a}. Show a => Maybe a -> ShowS
outputLCtx Maybe CharSet
lctx ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS
space
ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RightContext SNum -> ShowS
forall r. Show r => RightContext r -> ShowS
showRCtx RightContext SNum
rctx
ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (case Maybe String
act of
Maybe String
Nothing -> ShowS
forall a. a -> a
id
Just String
code -> String -> ShowS
str String
" { " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
str String
code ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
str String
" }")
ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS
nl
infoTransition :: (a, a) -> ShowS
infoTransition (a
char',a
state)
= String -> ShowS
str (SNum -> ShowS
ljustify SNum
8 (a -> String
forall a. Show a => a -> String
show a
char'))
ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
str String
" -> "
ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> ShowS
forall a. Show a => a -> ShowS
shows a
state
outputLCtx :: Maybe a -> ShowS
outputLCtx Maybe a
Nothing
= ShowS
forall a. a -> a
id
outputLCtx (Just a
set)
= ShowS -> ShowS
paren (a -> String
forall a. Show a => a -> String
show a
set String -> ShowS
forall a. [a] -> [a] -> [a]
++) ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> ShowS
char Char
'^'
outputArr :: Array i e -> ShowS
outputArr Array i e
arr
= String -> ShowS
str String
"Array.array " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (i, i) -> ShowS
forall a. Show a => a -> ShowS
shows (Array i e -> (i, i)
forall i e. Array i e -> (i, i)
bounds Array i e
arr) ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS
space
ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(i, e)] -> ShowS
forall a. Show a => a -> ShowS
shows (Array i e -> [(i, e)]
forall i e. Ix i => Array i e -> [(i, e)]
assocs Array i e
arr)