symantic-parser-0.1.0.20210201: Parser combinators statically optimized and staged via typed meta-programming
Safe HaskellNone
LanguageHaskell2010

Symantic.Parser.Machine.Generate

Synopsis

Documentation

Type Gen

data Gen inp vs es a Source #

Generate the CodeQ parsing the input.

Constructors

Gen 

Fields

Instances

Instances details
Joinable Gen Source # 
Instance details

Defined in Symantic.Parser.Machine.Generate

Methods

defJoin :: forall v inp (vs :: [Type]) (es :: Peano) a. LetName v -> Gen inp (v ': vs) es a -> Gen inp vs es a -> Gen inp vs es a Source #

refJoin :: forall v inp (vs :: [Type]) (es :: Peano) a. LetName v -> Gen inp (v ': vs) es a Source #

Inputable Gen Source # 
Instance details

Defined in Symantic.Parser.Machine.Generate

Methods

loadInput :: forall inp (vs :: [Type]) (es :: Peano) a. Gen inp vs es a -> Gen inp (Cursor inp ': vs) es a Source #

pushInput :: forall inp (vs :: [Type]) (es :: Peano) a. Gen inp (Cursor inp ': vs) es a -> Gen inp vs es a Source #

Failable Gen Source # 
Instance details

Defined in Symantic.Parser.Machine.Generate

Methods

fail :: forall inp (vs :: [Type]) (es :: Peano) a. [ErrorItem (InputToken inp)] -> Gen inp vs ('Succ es) a Source #

popFail :: forall inp (vs :: [Type]) (es :: Peano) a. Gen inp vs es a -> Gen inp vs ('Succ es) a Source #

catchFail :: forall inp (vs :: [Type]) (es :: Peano) a. Gen inp vs ('Succ es) a -> Gen inp (Cursor inp ': vs) es a -> Gen inp vs es a Source #

Branchable Gen Source # 
Instance details

Defined in Symantic.Parser.Machine.Generate

Methods

caseI :: forall inp x (vs :: [Type]) (es :: Peano) r y. Gen inp (x ': vs) es r -> Gen inp (y ': vs) es r -> Gen inp (Either x y ': vs) es r Source #

choices :: forall v inp (vs :: [Type]) (es :: Peano) a. [TermInstr (v -> Bool)] -> [Gen inp vs es a] -> Gen inp vs es a -> Gen inp (v ': vs) es a Source #

ifI :: forall inp (vs :: [Type]) (es :: Peano) a. Gen inp vs es a -> Gen inp vs es a -> Gen inp (Bool ': vs) es a Source #

Routinable Gen Source # 
Instance details

Defined in Symantic.Parser.Machine.Generate

Methods

subroutine :: forall v inp (vs :: [Type]) (es :: Peano) a. LetName v -> Gen inp '[] ('Succ 'Zero) v -> Gen inp vs ('Succ es) a -> Gen inp vs ('Succ es) a Source #

call :: forall v inp (vs :: [Type]) (es :: Peano) a. LetName v -> Gen inp (v ': vs) ('Succ es) a -> Gen inp vs ('Succ es) a Source #

ret :: forall inp a (es :: Peano). Gen inp '[a] es a Source #

jump :: forall a inp (es :: Peano). LetName a -> Gen inp '[] ('Succ es) a Source #

Stackable Gen Source # 
Instance details

Defined in Symantic.Parser.Machine.Generate

Methods

push :: forall v inp (vs :: [Type]) (es :: Peano) a. TermInstr v -> Gen inp (v ': vs) es a -> Gen inp vs es a Source #

pop :: forall inp (vs :: [Type]) (es :: Peano) a v. Gen inp vs es a -> Gen inp (v ': vs) es a Source #

liftI2 :: forall x y z inp (vs :: [Type]) (es :: Peano) a. TermInstr (x -> y -> z) -> Gen inp (z ': vs) es a -> Gen inp (y ': (x ': vs)) es a Source #

swap :: forall inp x y (vs :: [Type]) (es :: Peano) a. Gen inp (x ': (y ': vs)) es a -> Gen inp (y ': (x ': vs)) es a Source #

mapI :: forall x y inp (vs :: [Type]) (es :: Peano) a. TermInstr (x -> y) -> Gen inp (y ': vs) es a -> Gen inp (x ': vs) es a Source #

appI :: forall inp y (vs :: [Type]) (es :: Peano) a x. Gen inp (y ': vs) es a -> Gen inp (x ': ((x -> y) ': vs)) es a Source #

Readable Char Gen Source # 
Instance details

Defined in Symantic.Parser.Machine.Generate

Methods

read :: forall inp (vs :: [Type]) (es :: Peano) a. Char ~ InputToken inp => [ErrorItem Char] -> TermInstr (Char -> Bool) -> Gen inp (Char ': vs) ('Succ es) a -> Gen inp vs ('Succ es) a Source #

Type ParsingError

data ParsingError inp Source #

Constructors

ParsingErrorStandard 

Fields

Instances

Instances details
Show (InputToken inp) => Show (ParsingError inp) Source # 
Instance details

Defined in Symantic.Parser.Machine.Generate

Type Offset

Type Horizon

type Horizon = Offset Source #

Synthetized minimal input length required for a successful parsing. Used with checkedHorizon to factorize input length checks, instead of checking the input length one InputToken at a time at each read.

Type Cont

type Cont inp v a = Cursor inp -> [ErrorItem (InputToken inp)] -> v -> Cursor inp -> Either (ParsingError inp) a Source #

Type FailHandler

type FailHandler inp a = Cursor inp -> Cursor inp -> [ErrorItem (InputToken inp)] -> Either (ParsingError inp) a Source #

generateCode :: forall inp ret. Ord (InputToken inp) => Show (InputToken inp) => Lift (InputToken inp) => Input inp => CodeQ inp -> Show (Cursor inp) => Gen inp '[] ('Succ 'Zero) ret -> CodeQ (Either (ParsingError inp) ret) Source #

(generateCode input mach) generates TemplateHaskell code parsing the given input according to the given Machine.

Type GenCtx

data GenCtx inp vs (es :: Peano) a Source #

This is an inherited (top-down) context only present at compile-time, to build TemplateHaskell splices.

Constructors

(Lift (InputToken inp), Cursorable (Cursor inp), Show (InputToken inp)) => GenCtx 

Fields

Type ValueStack

data ValueStack vs where Source #

Constructors

ValueStackEmpty :: ValueStack '[] 
ValueStackCons 

Fields

Type FailStack

data FailStack inp a es where Source #

Constructors

FailStackEmpty :: FailStack inp a 'Zero 
FailStackCons 

Fields

generateSuspend :: Gen inp (v ': vs) es a -> GenCtx inp vs es a -> CodeQ (Cont inp v a) Source #

Generate a continuation to be called with generateResume, used when call returns. The return value is pushed on the valueStack.

generateResume :: CodeQ (Cont inp v a) -> Gen inp (v ': vs) es a Source #

Generate a call to the generateSuspend continuation. Used when call returns.

checkHorizon :: Lift (InputToken inp) => Gen inp vs ('Succ es) a -> Gen inp vs ('Succ es) a Source #

checkToken :: forall inp vs es a. Ord (InputToken inp) => Lift (InputToken inp) => [ErrorItem (InputToken inp)] -> TermInstr (InputToken inp -> Bool) -> Gen inp (InputToken inp ': vs) ('Succ es) a -> Gen inp vs ('Succ es) a Source #