Text.GrammarCombinators.Base.ProductionRule
- class ProductionRule p where
- (>>>) :: p (a -> b) -> p a -> p b
- (|||) :: p va -> p va -> p va
- endOfInput :: p ()
- die :: p a
- class ProductionRule p => LiftableProductionRule p where
- epsilonL :: a -> Q Exp -> p a
- optionally :: p v -> p (Maybe v)
- epsilonLS :: (Lift v, LiftableProductionRule p) => v -> p v
- class LiftableProductionRule p => EpsProductionRule p where
- epsilon :: a -> p a
- class TokenProductionRule p t | p -> t where
- token :: t -> p (ConcreteToken t)
- (*>>>) :: (ProductionRule p, LiftableProductionRule p) => p a -> p b -> p b
- (>>>*) :: (ProductionRule p, LiftableProductionRule p) => p a -> p b -> p a
- ($>>) :: EpsProductionRule p => (a -> b) -> p a -> p b
- ($>>*) :: EpsProductionRule p => a -> p b -> p a
- ($|>>) :: LiftableProductionRule p => (a -> b, Q Exp) -> p a -> p b
- ($|>>*) :: LiftableProductionRule p => (a, Q Exp) -> p b -> p a
- class RecProductionRule p phi r | p -> phi, p -> r where
- ref :: phi ix -> p (r ix)
- class (ProductionRule p, LiftableProductionRule p, RecProductionRule p phi r) => LoopProductionRule p phi r | p -> phi, p -> r where
- class SuperProductionRule p where
- subref :: (DomainEmbedding phi phi' supIxT, HFunctor phi (PF phi), ProductionRule (p phi ixT r t), ProductionRule (p phi' (IxMapSeq ixT supIxT) (SubVal supIxT r) t)) => (forall ix'. phi' ix' -> p phi' (IxMapSeq ixT supIxT) (SubVal supIxT r) t (PF phi' (SubVal supIxT r) ix')) -> phi' ix -> phi (supIxT ix) -> p phi ixT r t (PF phi r (supIxT ix))
- tokenRange :: forall p t. (ProductionRule p, TokenProductionRule p t) => [t] -> p (ConcreteToken t)
- string :: forall p t. (ProductionRule p, LiftableProductionRule p, TokenProductionRule p t) => [t] -> p [ConcreteToken t]
- manyInf :: (ProductionRule p, LiftableProductionRule p) => p a -> p [a]
- many1Inf :: (ProductionRule p, LiftableProductionRule p) => p a -> p [a]
Documentation
class ProductionRule p whereSource
Base type class for production rule interpretations. A production rule
interpretation that is an instance of the ProductionRule type class supports
sequencing and disjunction of rules, empty rules, dead rules and end-of-input
rules.
Methods
(>>>) :: p (a -> b) -> p a -> p bSource
Sequence two rules. Result of the sequenced rule is the application of the result of the first rule to the result of the second.
(|||) :: p va -> p va -> p vaSource
Disjunction of two rules.
endOfInput :: p ()Source
End of input rule. Matches only at end of input, consumes nothing, produces '()' as result.
Dead rule. Never matches.
Instances
| Token t => ProductionRule (WrapGenParser t) | |
| ProductionRule (RecDecRule t) | |
| Token t => ProductionRule (WrapP t) | |
| (Domain phi, Token t) => ProductionRule (BranchSelectorComputer phi r t) | |
| ProductionRule (AssessSizeProductionRule phi r t) | |
| ProductionRule (EnumTokensRule phi r t) | |
| ProductionRule (IsEpsilonRule phi r t) | |
| ProductionRule (PrintProductionRule phi r t) | |
| ProductionRule (GraphConstructor phi r t) | |
| ProductionRule (LLRule phi ixT r t) | |
| (Domain phi, Token t) => ProductionRule (FSCalculator phi ixT r t) | |
| ProductionRule (RealLL1Rule phi ixT r t) | |
| (ProductionRule p, EpsProductionRule p) => ProductionRule (CombineEpsilonsRule p phi r t) | |
| ProductionRule p => ProductionRule (FilterDiesRule p phi r t) | |
| Token t => ProductionRule (FSCalculator phi r t rr) | |
| ProductionRule (IsChainNT phi r t rr) | |
| (ProductionRule p, EpsProductionRule p) => ProductionRule (RuleToManyWrapper p phi r t) | |
| ProductionRule (EnumerateProductionRule phi ixT r t) | |
| ProductionRule (IsDeadRule phi r t rr) | |
| ProductionRule p => ProductionRule (UnfoldDeadRule p phi r t) | |
| ProductionRule p => ProductionRule (UnfoldLoopsWrapper p phi ixT r t) | |
| ProductionRule p => ProductionRule (RPWRule p phi ixT r t) | |
| ProductionRule p => ProductionRule (UnfoldDepthFirstRule p phi r t rr) | |
| ProductionRule (FoldReachableIntRule phi r t rr n) | |
| ProductionRule (PackratRule phitop rtop phi ixT r t) | |
| ProductionRule p => ProductionRule (FLWrap p (FoldLoopsDomain phi) (FoldLoopsValue r) phi r t) | |
| (ProductionRule p, EpsProductionRule p, RecProductionRule p (LCDomain phi t) (LCValue r t)) => ProductionRule (TransformLCRule p (LCDomain phi t) (LCValue r t) phi r t) | |
| (ProductionRule p, LiftableProductionRule p) => ProductionRule (TransformUPWrapper p surrIx (UPDomain phi) (UPValue r) phi ixT r t) |
class ProductionRule p => LiftableProductionRule p whereSource
Methods
epsilonL :: a -> Q Exp -> p aSource
Epsilon rule with lifted value. Always matches, consumes nothing, produces the given value (with its lifted version) as result.
optionally :: p v -> p (Maybe v)Source
Optionally match a given rule.
Instances
epsilonLS :: (Lift v, LiftableProductionRule p) => v -> p vSource
class LiftableProductionRule p => EpsProductionRule p whereSource
Methods
Epsilon rule. Always matches, consumes nothing, produces the given value as result.
Instances
| Token t => EpsProductionRule (WrapGenParser t) | |
| EpsProductionRule (RecDecRule t) | |
| Token t => EpsProductionRule (WrapP t) | |
| (Domain phi, Token t) => EpsProductionRule (BranchSelectorComputer phi r t) | |
| EpsProductionRule (AssessSizeProductionRule phi r t) | |
| EpsProductionRule (EnumTokensRule phi r t) | |
| EpsProductionRule (IsEpsilonRule phi r t) | |
| EpsProductionRule (PrintProductionRule phi r t) | |
| EpsProductionRule (GraphConstructor phi r t) | |
| EpsProductionRule (LLRule phi ixT r t) | |
| (Domain phi, Token t) => EpsProductionRule (FSCalculator phi ixT r t) | |
| EpsProductionRule (RealLL1Rule phi ixT r t) | |
| EpsProductionRule p => EpsProductionRule (CombineEpsilonsRule p phi r t) | |
| EpsProductionRule p => EpsProductionRule (FilterDiesRule p phi r t) | |
| Token t => EpsProductionRule (FSCalculator phi r t rr) | |
| EpsProductionRule (IsChainNT phi r t rr) | |
| (ProductionRule p, EpsProductionRule p) => EpsProductionRule (RuleToManyWrapper p phi r t) | |
| EpsProductionRule (EnumerateProductionRule phi ixT r t) | |
| EpsProductionRule (IsDeadRule phi r t rr) | |
| EpsProductionRule p => EpsProductionRule (UnfoldDeadRule p phi r t) | |
| EpsProductionRule p => EpsProductionRule (UnfoldLoopsWrapper p phi ixT r t) | |
| EpsProductionRule p => EpsProductionRule (RPWRule p phi ixT r t) | |
| EpsProductionRule p => EpsProductionRule (UnfoldDepthFirstRule p phi r t rr) | |
| EpsProductionRule (FoldReachableIntRule phi r t rr n) | |
| EpsProductionRule (PackratRule phitop rtop phi ixT r t) | |
| EpsProductionRule p => EpsProductionRule (FLWrap p (FoldLoopsDomain phi) (FoldLoopsValue r) phi r t) | |
| (ProductionRule p, EpsProductionRule p, RecProductionRule p (LCDomain phi t) (LCValue r t)) => EpsProductionRule (TransformLCRule p (LCDomain phi t) (LCValue r t) phi r t) | |
| EpsProductionRule p => EpsProductionRule (TransformUPWrapper p surrIx (UPDomain phi) (UPValue r) phi ixT r t) |
class TokenProductionRule p t | p -> t whereSource
Type class for production rules matching tokens of a certain
token type t.
t should be an instance of the Token type class.
Methods
token :: t -> p (ConcreteToken t)Source
Match a given token of type t and produce its concrete
value (of type ConcreteToken t).
Instances
| Token t => TokenProductionRule (WrapGenParser t) t | |
| Token t => TokenProductionRule (RecDecRule t) t | |
| Token t => TokenProductionRule (WrapP t) t | |
| (Token t, Domain phi) => TokenProductionRule (BranchSelectorComputer phi r t) t | |
| Token t => TokenProductionRule (AssessSizeProductionRule phi r t) t | |
| Token t => TokenProductionRule (EnumTokensRule phi r t) t | |
| TokenProductionRule (IsEpsilonRule phi r t) t | |
| Token t => TokenProductionRule (PrintProductionRule phi r t) t | |
| Token t => TokenProductionRule (GraphConstructor phi r t) t | |
| Token t => TokenProductionRule (LLRule phi ixT r t) t | |
| (Token t, Domain phi) => TokenProductionRule (FSCalculator phi ixT r t) t | |
| Token t => TokenProductionRule (RealLL1Rule phi ixT r t) t | |
| TokenProductionRule p t => TokenProductionRule (CombineEpsilonsRule p phi r t) t | |
| TokenProductionRule p t => TokenProductionRule (FilterDiesRule p phi r t) t | |
| Token t => TokenProductionRule (FSCalculator phi r t rr) t | |
| TokenProductionRule (IsChainNT phi r t rr) t | |
| ProductionRule p => TokenProductionRule (RuleToManyWrapper p phi r t) t | |
| Token t => TokenProductionRule (EnumerateProductionRule phi ixT r t) t | |
| TokenProductionRule (IsDeadRule phi r t rr) t | |
| TokenProductionRule p t => TokenProductionRule (UnfoldDeadRule p phi r t) t | |
| TokenProductionRule p t => TokenProductionRule (UnfoldLoopsWrapper p phi ixT r t) t | |
| TokenProductionRule p t => TokenProductionRule (RPWRule p phi ixT r t) t | |
| TokenProductionRule p t => TokenProductionRule (UnfoldDepthFirstRule p phi r t rr) t | |
| TokenProductionRule (FoldReachableIntRule phi r t rr n) t | |
| Token t => TokenProductionRule (PackratRule phitop rtop phi ixT r t) t | |
| TokenProductionRule p t => TokenProductionRule (FLWrap p (FoldLoopsDomain phi) (FoldLoopsValue r) phi r t) t | |
| (Token t, TokenProductionRule p t, ProductionRule p, LiftableProductionRule p, RecProductionRule p (LCDomain phi t) (LCValue r t)) => TokenProductionRule (TransformLCRule p unused1 unused2 phi r t) t | |
| (TokenProductionRule p t, ProductionRule p) => TokenProductionRule (TransformUPWrapper p surrIx (UPDomain phi) (UPValue r) phi ixT r t) t |
(*>>>) :: (ProductionRule p, LiftableProductionRule p) => p a -> p b -> p bSource
Sequence two rules, but drop the result of the first.
(>>>*) :: (ProductionRule p, LiftableProductionRule p) => p a -> p b -> p aSource
Sequence two rules, but drop the result of the second.
($>>) :: EpsProductionRule p => (a -> b) -> p a -> p bSource
Apply a given function to the result of a given rule.
($>>*) :: EpsProductionRule p => a -> p b -> p aSource
Replace a rule's result value with a given value.
($|>>) :: LiftableProductionRule p => (a -> b, Q Exp) -> p a -> p bSource
Apply a given function to the result of a given rule.
($|>>*) :: LiftableProductionRule p => (a, Q Exp) -> p b -> p aSource
Replace a rule's result value with a given value.
class RecProductionRule p phi r | p -> phi, p -> r whereSource
Production rule interpretations supporting the RecProductionRule type class support references
to non-terminals in a given domain phi. The type of the result values of the rules is determined
by semantic value family r.
Instances
| (Token t, Domain phi) => RecProductionRule (BranchSelectorComputer phi r t) phi r | |
| RecProductionRule (AssessSizeProductionRule phi r t) phi r | |
| ShowFam phi => RecProductionRule (EnumTokensRule phi r t) phi r | |
| RecProductionRule (IsEpsilonRule phi r t) phi r | |
| ShowFam phi => RecProductionRule (PrintProductionRule phi r t) phi r | |
| Domain phi => RecProductionRule (GraphConstructor phi r t) phi r | |
| RecProductionRule (LLRule phi ixT r t) phi r | |
| (Domain phi, Token t) => RecProductionRule (FSCalculator phi ixT r t) phi r | |
| RecProductionRule (RealLL1Rule phi ixT r t) phi r | |
| RecProductionRule p phi r => RecProductionRule (CombineEpsilonsRule p phi r t) phi r | |
| RecProductionRule p phi r => RecProductionRule (FilterDiesRule p phi r t) phi r | |
| (Token t, EqFam phi) => RecProductionRule (FSCalculator phi r t rr) phi r | |
| EqFam phi => RecProductionRule (IsChainNT phi r t rr) phi r | |
| LoopProductionRule p phi r => RecProductionRule (RuleToManyWrapper p phi r t) phi r | |
| RecProductionRule (EnumerateProductionRule phi ixT r t) phi r | |
| (ProductionRule p, RecProductionRule p phi r) => RecProductionRule (UnfoldDeadRule p phi r t) phi r | |
| RecProductionRule p phi r => RecProductionRule (UnfoldLoopsWrapper p phi ixT r t) phi r | |
| ProductionRule p => RecProductionRule (RPWRule p phi ixT r t) phi r | |
| SimpleRecProductionRule p phi r rr => RecProductionRule (UnfoldDepthFirstRule p phi r t rr) phi r | |
| RecProductionRule (PackratRule phitop rtop phi ixT r t) phi r | |
| (RecProductionRule p (FoldLoopsDomain phi) (FoldLoopsValue r), ProductionRule p, EpsProductionRule p) => RecProductionRule (FLWrap p (FoldLoopsDomain phi) (FoldLoopsValue r) phi r t) phi r | |
| (ProductionRule p, EqFam phi, EpsProductionRule p, RecProductionRule p (LCDomain phi t) (LCValue r t)) => RecProductionRule (TransformLCRule p (LCDomain phi t) (LCValue r t) phi r t) phi r | |
| (RecProductionRule p (UPDomain phi) (UPValue r), LiftableProductionRule p, EqFam phi, LoopProductionRule p (UPDomain phi) (UPValue r)) => RecProductionRule (TransformUPWrapper p surrIx (UPDomain phi) (UPValue r) phi ixT r t) phi r |
class (ProductionRule p, LiftableProductionRule p, RecProductionRule p phi r) => LoopProductionRule p phi r | p -> phi, p -> r whereSource
Production rule interpretations supporting the LoopProductionRule
type class allow for Kleene-star quantified references to
non-terminals (zero or more, see the manyRef function) as well
as +-quantified references to non-terminals (one or more, see
the many1Ref function).
An instance can implement either manyRef or many1Ref, both or neither. Not implementing either produces old-style many and many1 combinator behaviour (discouraged for most situations)
Methods
manyRef :: phi ix -> p [r ix]Source
Match a given non-terminal zero or more times.
many1Ref :: phi ix -> p [r ix]Source
Match a given non-terminal one or more times.
Instances
| (Token t, Domain phi) => LoopProductionRule (BranchSelectorComputer phi r t) phi r | |
| LoopProductionRule (AssessSizeProductionRule phi r t) phi r | |
| ShowFam phi => LoopProductionRule (EnumTokensRule phi r t) phi r | |
| LoopProductionRule (IsEpsilonRule phi r t) phi r | |
| ShowFam phi => LoopProductionRule (PrintProductionRule phi r t) phi r | |
| Domain phi => LoopProductionRule (GraphConstructor phi r t) phi r | |
| (EpsProductionRule p, LoopProductionRule p phi r) => LoopProductionRule (CombineEpsilonsRule p phi r t) phi r | |
| LoopProductionRule p phi r => LoopProductionRule (FilterDiesRule p phi r t) phi r | |
| (Token t, EqFam phi) => LoopProductionRule (FSCalculator phi r t rr) phi r | |
| EqFam phi => LoopProductionRule (IsChainNT phi r t rr) phi r | |
| (ProductionRule p, EpsProductionRule p, LoopProductionRule p phi r) => LoopProductionRule (RuleToManyWrapper p phi r t) phi r | |
| (ProductionRule p, LiftableProductionRule p, LoopProductionRule p phi r) => LoopProductionRule (UnfoldDeadRule p phi r t) phi r | |
| (ProductionRule p, LiftableProductionRule p, RecProductionRule p phi r) => LoopProductionRule (UnfoldLoopsWrapper p phi ixT r t) phi r | |
| LoopProductionRule p phi r => LoopProductionRule (RPWRule p phi ixT r t) phi r | |
| (ProductionRule p, LiftableProductionRule p, SimpleRecProductionRule p phi r rr, SimpleLoopProductionRule p phi r rr) => LoopProductionRule (UnfoldDepthFirstRule p phi r t rr) phi r | |
| LoopProductionRule (PackratRule phitop rtop phi ixT r t) phi r | |
| (ProductionRule p, EpsProductionRule p, LiftableProductionRule p, TokenProductionRule p t, RecProductionRule p (FoldLoopsDomain phi) (FoldLoopsValue r)) => LoopProductionRule (FLWrap p (FoldLoopsDomain phi) (FoldLoopsValue r) phi r t) phi r | |
| (EqFam phi, EpsProductionRule p, LoopProductionRule p (LCDomain phi t) (LCValue r t)) => LoopProductionRule (TransformLCRule p (LCDomain phi t) (LCValue r t) phi r t) phi r | |
| (EqFam phi, LiftableProductionRule p, LoopProductionRule p (UPDomain phi) (UPValue r)) => LoopProductionRule (TransformUPWrapper p surrIx (UPDomain phi) (UPValue r) phi ixT r t) phi r |
class SuperProductionRule p whereSource
The 'SuperProductionRule| type class is in an experimental state, and currently not intended for general use.
Methods
subref :: (DomainEmbedding phi phi' supIxT, HFunctor phi (PF phi), ProductionRule (p phi ixT r t), ProductionRule (p phi' (IxMapSeq ixT supIxT) (SubVal supIxT r) t)) => (forall ix'. phi' ix' -> p phi' (IxMapSeq ixT supIxT) (SubVal supIxT r) t (PF phi' (SubVal supIxT r) ix')) -> phi' ix -> phi (supIxT ix) -> p phi ixT r t (PF phi r (supIxT ix))Source
Instances
| SuperProductionRule (PackratRule phitop rtop) |
tokenRange :: forall p t. (ProductionRule p, TokenProductionRule p t) => [t] -> p (ConcreteToken t)Source
Match any token in a given range of tokens.
string :: forall p t. (ProductionRule p, LiftableProductionRule p, TokenProductionRule p t) => [t] -> p [ConcreteToken t]Source
Consecutively match a given list of tokens and return their concrete token values as a list.
manyInf :: (ProductionRule p, LiftableProductionRule p) => p a -> p [a]Source
An old style many combinator. Produces an infinite rule similar to Parsec's many rule.
Prefer to use the manyRef function whenever possible.
many1Inf :: (ProductionRule p, LiftableProductionRule p) => p a -> p [a]Source
An old style many combinator. Produces an infinite rule similar to Parsec's many rule.
Prefer to use the manyRef function whenever possible.