Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- newtype Gen inp vs es a = Gen {
- unGen :: GenCtx inp vs es a -> CodeQ (Either (ParsingError inp) a)
- data ParsingError inp = ParsingErrorStandard {
- parsingErrorOffset :: Offset
- parsingErrorUnexpected :: Maybe (InputToken inp)
- parsingErrorExpecting :: Set (ErrorItem (InputToken inp))
- type Offset = Int
- type Cont inp v a = Cursor inp -> [ErrorItem (InputToken inp)] -> v -> Cursor inp -> Either (ParsingError inp) a
- type SubRoutine inp v a = Cont inp v a -> Cursor inp -> FailHandler inp a -> Either (ParsingError inp) a
- type FailHandler inp a = Cursor inp -> Cursor inp -> [ErrorItem (InputToken inp)] -> Either (ParsingError inp) a
- generate :: 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)
- data GenCtx inp vs (es :: Peano) a = (Lift (InputToken inp), Cursorable (Cursor inp), Show (InputToken inp)) => GenCtx {
- valueStack :: ValueStack vs
- failStack :: FailStack inp es a
- retCode :: CodeQ (Cont inp a a)
- input :: CodeQ (Cursor inp)
- moreInput :: CodeQ (Cursor inp -> Bool)
- nextInput :: CodeQ (Cursor inp -> (# InputToken inp, Cursor inp #))
- farthestInput :: CodeQ (Cursor inp)
- farthestExpecting :: CodeQ [ErrorItem (InputToken inp)]
- data ValueStack vs where
- ValueStackEmpty :: ValueStack '[]
- ValueStackCons :: {..} -> ValueStack (v ': vs)
- data FailStack inp es a where
- FailStackEmpty :: FailStack inp 'Zero a
- FailStackCons :: {..} -> FailStack inp ('Succ es) a
- suspend :: Gen inp (v ': vs) es a -> GenCtx inp vs es a -> CodeQ (Cont inp v a)
- resume :: CodeQ (Cont inp v a) -> Gen inp (v ': vs) es a
- sat :: forall inp vs es a. Ord (InputToken inp) => Lift (InputToken inp) => CodeQ (InputToken inp -> Bool) -> Gen inp (InputToken inp ': vs) ('Succ es) a -> Gen inp vs ('Succ es) a -> Gen inp vs ('Succ es) a
- emitLengthCheck :: Lift (InputToken inp) => Int -> Gen inp vs es a -> Gen inp vs es a -> Gen inp vs es a
- liftCode :: InstrPure a -> CodeQ a
- liftCode1 :: InstrPure (a -> b) -> CodeQ a -> CodeQ b
- liftCode2 :: InstrPure (a -> b -> c) -> CodeQ a -> CodeQ b -> CodeQ c
Type Gen
newtype Gen inp vs es a Source #
Generate the CodeQ
parsing the input.
Instances
Joinable Gen Source # | |
Routinable Gen Source # | |
Defined in Symantic.Parser.Machine.Generate subroutine :: forall v inp (vs :: [Type]) (es :: Peano) ret. LetName v -> Gen inp '[] ('Succ 'Zero) v -> Gen inp vs ('Succ es) ret -> Gen inp vs ('Succ es) ret Source # call :: forall v inp (vs :: [Type]) (es :: Peano) ret. LetName v -> Gen inp (v ': vs) ('Succ es) ret -> Gen inp vs ('Succ es) ret Source # ret :: forall inp ret (es :: Peano). Gen inp '[ret] es ret Source # jump :: forall ret inp (es :: Peano). LetName ret -> Gen inp '[] ('Succ es) ret Source # | |
Inputable Gen Source # | |
Failable Gen Source # | |
Defined in Symantic.Parser.Machine.Generate fail :: forall inp (vs :: [Type]) (es :: Peano) ret. [ErrorItem (InputToken inp)] -> Gen inp vs ('Succ es) ret Source # popFail :: forall inp (vs :: [Type]) (es :: Peano) ret. Gen inp vs es ret -> Gen inp vs ('Succ es) ret Source # catchFail :: forall inp (vs :: [Type]) (es :: Peano) ret. Gen inp vs ('Succ es) ret -> Gen inp (Cursor inp ': vs) es ret -> Gen inp vs es ret Source # | |
Branchable Gen Source # | |
Defined in Symantic.Parser.Machine.Generate case_ :: forall inp x (vs :: [Type]) (n :: Peano) r y. Gen inp (x ': vs) n r -> Gen inp (y ': vs) n r -> Gen inp (Either x y ': vs) n r Source # choices :: forall v inp (vs :: [Type]) (es :: Peano) ret. [InstrPure (v -> Bool)] -> [Gen inp vs es ret] -> Gen inp vs es ret -> Gen inp (v ': vs) es ret Source # | |
Stackable Gen Source # | |
Defined in Symantic.Parser.Machine.Generate push :: forall v inp (vs :: [Type]) (n :: Peano) ret. InstrPure v -> Gen inp (v ': vs) n ret -> Gen inp vs n ret Source # pop :: forall inp (vs :: [Type]) (n :: Peano) ret v. Gen inp vs n ret -> Gen inp (v ': vs) n ret Source # liftI2 :: forall x y z inp (vs :: [Type]) (es :: Peano) ret. InstrPure (x -> y -> z) -> Gen inp (z ': vs) es ret -> Gen inp (y ': (x ': vs)) es ret Source # swap :: forall inp x y (vs :: [Type]) (n :: Peano) r. Gen inp (x ': (y ': vs)) n r -> Gen inp (y ': (x ': vs)) n r Source # | |
Readable Gen Char Source # | |
Type ParsingError
data ParsingError inp Source #
ParsingErrorStandard | |
|
Instances
Show (InputToken inp) => Show (ParsingError inp) Source # | |
Defined in Symantic.Parser.Machine.Generate showsPrec :: Int -> ParsingError inp -> ShowS # show :: ParsingError inp -> String # showList :: [ParsingError inp] -> ShowS # |
Type Offset
Type Cont
type Cont inp v a = Cursor inp -> [ErrorItem (InputToken inp)] -> v -> Cursor inp -> Either (ParsingError inp) a Source #
Type SubRoutine
type SubRoutine inp v a = Cont inp v a -> Cursor inp -> FailHandler inp a -> Either (ParsingError inp) a Source #
Type FailHandler
type FailHandler inp a = Cursor inp -> Cursor inp -> [ErrorItem (InputToken inp)] -> Either (ParsingError inp) a Source #
generate :: 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 #
Type GenCtx
data GenCtx inp vs (es :: Peano) a Source #
This is a context only present at compile-time.
(Lift (InputToken inp), Cursorable (Cursor inp), Show (InputToken inp)) => GenCtx | |
|
Type ValueStack
data ValueStack vs where Source #
ValueStackEmpty :: ValueStack '[] | |
ValueStackCons | |
|
Type FailStack
data FailStack inp es a where Source #
FailStackEmpty :: FailStack inp 'Zero a | |
FailStackCons | |
|
sat :: forall inp vs es a. Ord (InputToken inp) => Lift (InputToken inp) => CodeQ (InputToken inp -> Bool) -> Gen inp (InputToken inp ': vs) ('Succ es) a -> Gen inp vs ('Succ es) a -> Gen inp vs ('Succ es) a Source #
emitLengthCheck :: Lift (InputToken inp) => Int -> Gen inp vs es a -> Gen inp vs es a -> Gen inp vs es a Source #