module Language.Lexer.Tlex ( module Language.Lexer.Tlex.Syntax, module Language.Lexer.Tlex.Runner, module Language.Lexer.Tlex.Data.InputString, buildRunner, ) where import Language.Lexer.Tlex.Data.InputString import Language.Lexer.Tlex.Prelude import Language.Lexer.Tlex.Runner import Language.Lexer.Tlex.Syntax import qualified Language.Lexer.Tlex.Machine.NFA as NFA import qualified Language.Lexer.Tlex.Pipeline.Dfa2Runner as TlexPipeline import qualified Language.Lexer.Tlex.Pipeline.MinDfa as TlexPipeline import qualified Language.Lexer.Tlex.Pipeline.Nfa2Dfa as TlexPipeline import qualified Language.Lexer.Tlex.Pipeline.Scanner2Nfa as TlexPipeline buildRunner :: Enum unit => Scanner unit action -> Runner unit action buildRunner :: forall unit action. Enum unit => Scanner unit action -> Runner unit action buildRunner Scanner unit action scanner = let nfa :: NFA action nfa = forall m. NFABuilder m () -> NFA m NFA.buildNFA do forall e m. Enum e => Scanner e m -> NFABuilder m () TlexPipeline.scanner2Nfa Scanner unit action scanner dfa :: DFA action dfa = forall a. NFA a -> DFA a TlexPipeline.nfa2Dfa NFA action nfa minDfa :: DFA action minDfa = forall a. DFA a -> DFA a TlexPipeline.minDfa DFA action dfa in forall e a. Enum e => DFA a -> Runner e a TlexPipeline.dfa2Runner DFA action minDfa