0 | module Text.ILex.Internal.DFA
2 | import Data.Linear.Traverse1
4 | import Text.ILex.Internal.ENFA
5 | import Text.ILex.Internal.NFA
6 | import Text.ILex.Internal.Types
10 | parameters {auto st : DFAState s a}
13 | process : SnocList Edge -> NEdges -> F1 s Edges
16 | discrete : Nat -> F1' s
18 | Nothing <- lookupNode x | Just v => pure ()
20 | ds <- process [<] nn.out
21 | let nde := N nn.pos nn.acc ds
24 | process sx [] = pure (sx <>> [])
25 | process sx (NE r ts :: xs) = T1.do
32 | [t] => process (sx:<E r t) xs
36 | lookupSet set >>= \case
38 | Just t => process (sx:<E r t) xs
43 | ns <- traverse1 getNNode set
44 | insertNNode t (foldl joinNNode (NN t [] []) ns)
46 | process (sx:<E r t) xs
50 | nodes = keys1 st.ngraph >>= traverse1_ discrete
53 | toDFA : TokenMap8 a -> F1 s (List (Nat,Node))
57 | connectedComponent children 0 st.graph