symantic-parser-0.2.0.20210703: src/Symantic/Parser.hs
module Symantic.Parser
( module Symantic.Parser.Grammar
, module Symantic.Parser.Machine
, module Symantic.Parser
) where
import Data.Either (Either)
import Data.Function (($))
import Language.Haskell.TH (CodeQ)
import qualified Language.Haskell.TH.Syntax as TH
import Symantic.Parser.Grammar
import Symantic.Parser.Machine
-- * Type 'Parser'
type Parser inp a = Machine Gen inp a
runParser :: forall inp a.
Inputable inp =>
Machinable (InputToken inp) Gen =>
Parser inp a ->
CodeQ (inp -> Either (ParsingError inp) a)
runParser p = TH.Code $ do
mach <- TH.runIO $ machine p
TH.examineCode $ generateCode mach