packages feed

ptera-0.1.0.0: src/Language/Parser/Ptera/Pipeline/Grammar2Runner.hs

module Language.Parser.Ptera.Pipeline.Grammar2Runner where

import           Language.Parser.Ptera.Prelude

import qualified Language.Parser.Ptera.Pipeline.SRB2Parser      as SRB2Parser
import qualified Language.Parser.Ptera.Pipeline.SafeGrammar2SRB as SafeGrammar2SRB
import qualified Language.Parser.Ptera.Runner                   as Runner
import qualified Language.Parser.Ptera.Syntax                   as Syntax

grammar2Runner :: forall initials ctx rules tokens elem
    .  Syntax.GrammarToken tokens elem
    => Syntax.GrammarM ctx rules tokens elem initials
    -> Either [StringLit] (Runner.T ctx rules elem initials)
grammar2Runner g = do
    srb <- SafeGrammar2SRB.safeGrammar2Srb g
    let parser = SRB2Parser.srb2Parser
            do Proxy @tokens
            do srb
    pure do Runner.UnsafeRunnerM parser