0 | module Text.ILex.Internal.ENFA
2 | import Data.Array.Core
3 | import Data.Array.Mutable
4 | import Data.Linear.Traverse1
6 | import Text.ILex.Internal.Types
7 | import Text.ILex.RExp
15 | parameters {auto st : DFAState s a}
16 | enfa : RExp8 b -> (tgt : Nat) -> F1 s Nat
17 | enfa Eps tgt = pure tgt
18 | enfa (And x y) tgt = enfa y tgt >>= enfa x
19 | enfa (Ch x) tgt = createENode (EN [] [] $
map (`E` tgt) $
ranges x)
20 | enfa (Or x y) tgt = T1.do
23 | createENode (EN [] [tx,ty] [])
25 | enfa (Star x) tgt = do
28 | insertENode me (EN [] [tx,tgt] [])
36 | toENFA : TokenMap8 a -> F1' s
38 | ps <- traverse1 (\x => (,x) <$> inc) rs
39 | traverse1_ insertTerminal ps
40 | ts <- traverse1 (\(n,r,c) => enfa r n) ps
41 | ignore1 $
insertENode 0 (EN [] ts [])
44 | debugENFA : TokenMap8 a -> F1 s (List (Nat, ENode))
45 | debugENFA ts = toENFA ts >> pairs1 st.egraph