packages feed

tlex-0.4.0.1: src/Language/Lexer/Tlex.hs

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 scanner =
    let nfa = NFA.buildNFA do TlexPipeline.scanner2Nfa scanner
        dfa = TlexPipeline.nfa2Dfa nfa
        minDfa = TlexPipeline.minDfa dfa
    in TlexPipeline.dfa2Runner minDfa