grammar-combinators 0.2.1 → 0.2.2
raw patch · 11 files changed
+85/−101 lines, 11 files
Files
- Text/GrammarCombinators/Parser/Packrat.hs +24/−50
- Text/GrammarCombinators/Parser/RealLL1.hs +5/−2
- Text/GrammarCombinators/Transform/FoldLoops.hs +2/−2
- Text/GrammarCombinators/Transform/LeftCorner.hs +23/−12
- Text/GrammarCombinators/Transform/PenalizeErrors.hs +1/−1
- Text/GrammarCombinators/Transform/UnfoldRecursion.hs +6/−22
- Text/GrammarCombinators/Transform/UniformPaull.hs +15/−3
- Text/GrammarCombinators/Utils/ToGraph.hs +0/−3
- Text/GrammarCombinators/Utils/UnfoldDepthFirst.hs +3/−4
- changelog +4/−0
- grammar-combinators.cabal +2/−2
Text/GrammarCombinators/Parser/Packrat.hs view
@@ -89,61 +89,56 @@ type InternalPRRule phi r t v = Derivs phi r t -> Result phi r t v type InternalGrammar phi r t = forall ix. phi ix -> InternalPRRule phi r t (r ix)-data PackratRule phitop rtop phi ixT r t v =- PackratRule {- runParse :: InternalGrammar phitop rtop t ->- (forall ix. phi ix -> rtop (ApplyIxMap ixT ix) -> r ix) -> - (forall ix. phi ix -> phitop (ApplyIxMap ixT ix)) ->- InternalPRRule phitop rtop t v- }-type PackratGrammar phitop rtop phi ixT rr r t = forall ix. phi ix -> PackratRule phitop rtop phi ixT rr t (r ix)+data PackratRule phi r t v =+ PackratRule { runParse :: InternalGrammar phi r t -> InternalPRRule phi r t v } -instance ProductionRule (PackratRule phitop rtop phi ixT r t) where- a >>> b = PackratRule $ \g rd si d0 -> - case runParse a g rd si d0 of - Parsed f d1 -> case runParse b g rd si d1 of+type PackratGrammar phi rr r t = forall ix. phi ix -> PackratRule phi rr t (r ix)++instance ProductionRule (PackratRule phi r t) where+ a >>> b = PackratRule $ \g d0 -> + case runParse a g d0 of + Parsed f d1 -> case runParse b g d1 of Parsed x d2 -> Parsed (f x) d2 _ -> NoParse _ -> NoParse -- TODO : parameterise disambiguation (keeping only 1st match or all)?- a ||| b = PackratRule $ \g rd si d ->- case runParse a g rd si d of+ a ||| b = PackratRule $ \g d ->+ case runParse a g d of Parsed v1 d1 -> Parsed v1 d1- _ -> case runParse b g rd si d of+ _ -> case runParse b g d of Parsed v2 d2 -> Parsed v2 d2 _ -> NoParse- die = PackratRule $ \_ _ _ _ -> NoParse- endOfInput = PackratRule $ \_ _ _ d -> + die = PackratRule $ \_ _ -> NoParse+ endOfInput = PackratRule $ \_ d -> case unPRResult $ unDerivs d PackratDomainEndOfInput of Parsed _ d' -> Parsed () d' _ -> NoParse -instance EpsProductionRule (PackratRule phitop rtop phi ixT r t) where- epsilon v = PackratRule $ \_ _ _ -> Parsed v+instance EpsProductionRule (PackratRule phi r t) where+ epsilon v = PackratRule $ \_ -> Parsed v -instance LiftableProductionRule (PackratRule phitop rtop phi ixT r t) where+instance LiftableProductionRule (PackratRule phi r t) where epsilonL v _ = epsilon v -instance (Token t) => TokenProductionRule (PackratRule phitop rtop phi ixT r t) t where- token c = PackratRule $ \_ _ _ d -> +instance (Token t) => TokenProductionRule (PackratRule phi r t) t where+ token c = PackratRule $ \_ d -> case unPRResult$ unDerivs d PackratDomainPrimToken of Parsed v' d' | classify (unPRPrimTokenValue v') == c -> Parsed (unPRPrimTokenValue v') d' _ -> NoParse- anyToken = PackratRule $ \_ _ _ d ->+ anyToken = PackratRule $ \_ d -> case unPRResult$ unDerivs d PackratDomainPrimToken of Parsed v' d' -> Parsed (unPRPrimTokenValue v') d' _ -> NoParse -instance RecProductionRule (PackratRule phitop rtop phi ixT r t) phi r where+instance RecProductionRule (PackratRule phi r t) phi r where ref (idx :: phi ix) =- PackratRule $ \grammar rd si d ->- fmap (rd idx) $ grammar (si idx) d+ PackratRule $ \grammar d -> grammar idx d -toInternalGrammar :: PackratGrammar phi r phi IxMapId r r t -> InternalGrammar phi r t+toInternalGrammar :: PackratGrammar phi r r t -> InternalGrammar phi r t toInternalGrammar g idx =- runParse (g idx) (toInternalGrammar g) (\_ -> id) id+ runParse (g idx) (toInternalGrammar g) parsePackratAll :: forall phi r t. (Token t, MemoFam phi) => InternalGrammar phi r t -> [ConcreteToken t] -> Derivs phi r t parsePackratAll grammar s =@@ -158,28 +153,7 @@ _ -> PRResult NoParse in buildDerivs derivs -instance SuperProductionRule (PackratRule phitop rtop) where- subref = prSubRef--prSubRef :: forall phitop phi phi' rtop r ixT t ix supIxT . (DomainEmbedding phi phi' supIxT, HFunctor phi (PF phi)) =>- (forall ix'. phi' ix' -> PackratRule phitop rtop phi' (IxMapSeq ixT supIxT) (SubVal supIxT r) t (PF phi' (SubVal supIxT r) ix')) ->- phi' ix -> phi (supIxT ix) -> - PackratRule phitop rtop phi ixT r t (PF phi r (supIxT ix))-prSubRef subgram idxb idx = PackratRule $ \outgram rd supIxTop ->- let - subrule :: PackratRule phitop rtop phi' (IxMapSeq ixT supIxT) (SubVal supIxT r) t (PF phi' (SubVal supIxT r) ix)- subrule = subgram idxb- rd' :: forall ix' . phi' ix' -> rtop (ApplyIxMap ixT (supIxT ix')) -> SubVal supIxT r ix'- rd' idx' v = MkSubVal $ rd (supIx idx') v- supIx' :: forall ix' . phi' ix' -> phitop (ApplyIxMap ixT (supIxT ix'))- supIx' idx' = supIxTop (supIx idx' :: phi (supIxT ix'))- oprrule :: InternalPRRule phitop rtop t (PF phi' (SubVal supIxT r) ix)- oprrule = runParse subrule outgram rd' supIx'- nprrule :: InternalPRRule phitop rtop t (PF phi r (supIxT ix))- nprrule = fmap (supPF idxb idx) . oprrule - in nprrule --instance LoopProductionRule (PackratRule phitop rtop phi ixT r t) phi r where+instance LoopProductionRule (PackratRule phi r t) phi r where manyRef = manyInf . ref -- | Parse a given string according to a given grammar, starting from a given start non-terminal,
Text/GrammarCombinators/Parser/RealLL1.hs view
@@ -64,11 +64,12 @@ | SplitBranchSelectorMemoL (FirstSet t) (BranchSelectorMemo t) (BranchSelectorMemo t) | FlipBS (BranchSelectorMemo t) -unBranchSelectorMemo :: (Token t) => BranchSelectorMemo t -> BranchSelector t+unBranchSelectorMemo :: forall t. (Token t) => BranchSelectorMemo t -> BranchSelector t unBranchSelectorMemo DefaultBranchSelectorMemo = defaultBranchSelector unBranchSelectorMemo (SplitBranchSelectorMemoL fs bsm1 bsm2) = let bs1 = unBranchSelectorMemo bsm1 bs2 = unBranchSelectorMemo bsm2+ selBranch :: Set t -> Bool -> [ConcreteToken t] -> a -> a -> (a, BranchSelector t) selBranch fts _ (t:_) b1 b2 = if classify t `member` fts then (b1,bs1) else (b2,bs2) selBranch _ f [] b1 b2 = if f then (b1,bs1) else (b2,bs2) in MkBS $ selBranch (firstTokens fs) (canBeEOI fs)@@ -191,10 +192,12 @@ prepareLL1Parser :: (Domain phi, Token t) => BSCGrammar phi r t rr -> RealLL1Table phi t prepareLL1Parser gram = MkRealLL1Table $ toMemoK $ branchSelector . fixBSC gram -parseRealLL1 :: (Domain phi, Token t) => RealLL1Grammar phi ixT r r t -> RealLL1Table phi t ->+parseRealLL1 :: forall phi ixT t r ix. (Domain phi, Token t) => RealLL1Grammar phi ixT r r t -> RealLL1Table phi t -> phi ix -> [ConcreteToken t] -> Maybe (r ix) parseRealLL1 gram selgmemo idx s = let+ selg :: phi ix' -> BranchSelector t selg = unBranchSelectorMemo . fromMemoK (unRealLL1Table selgmemo)+ m :: MaybeT (State [ConcreteToken t]) (r ix) m = runLL1Rule (gram idx) (selg idx) selg gram in evalState (runMaybeT m) s
Text/GrammarCombinators/Transform/FoldLoops.hs view
@@ -182,6 +182,6 @@ ProcessingExtendedContextFreeGrammar phi t r-> ProcessingContextFreeGrammar (FoldLoopsDomain phi) t (FoldLoopsValue r) foldAndProcessLoops gram = - let- loopsproc = processFoldLoops identityProcessor+ let loopsproc :: FoldLoopsDomain phi ix -> FoldLoopsResultValue r r ix -> FoldLoopsValue r ix+ loopsproc = processFoldLoops identityProcessor in applyProcessor (foldLoops gram) loopsproc
Text/GrammarCombinators/Transform/LeftCorner.hs view
@@ -70,6 +70,7 @@ instance (Token t, FoldFam phi) => FoldFam (LCDomain phi t) where foldFam (f :: forall ix. LCDomain phi t ix -> b -> b) n = let n' = foldFam (f . LCBase) n+ f' :: forall ix. phi ix -> b -> b f' idx = foldFam (f . (LCNTMinNT `flip` idx)) n'' = foldFam f' n' f'' tt = foldFam (f . LCNTMinT tt)@@ -103,14 +104,15 @@ instance (EqFam phi, Token t) => EqFam (LCDomain phi t) where overrideIdx f (LCBase idx) v (LCBase idx') = unSubVal $ overrideIdx (MkSubVal . f . LCBase) idx (MkSubVal v) idx'- overrideIdx (f :: forall ix. LCDomain phi t ix -> r ix) (LCNTMinNT idx idxm) v (LCNTMinNT idx' idxm') =+ overrideIdx (f :: forall ix'. LCDomain phi t ix' -> r ix') (LCNTMinNT (idx :: phi ix) (idxm :: phi ixm)) v (LCNTMinNT idxr idxmr) = let- fc :: forall ix ixm. phi ix -> phi ixm -> r (LCNTMinNTIx ix ixm)- fc idx'' idxm'' = f $ LCNTMinNT idx'' idxm''- fsect' idxm'' = unSubVal $ overrideIdx (MkSubVal . fc idx) idxm (MkSubVal v) idxm''- fc' :: forall ix ixm. phi ix -> phi ixm -> r (LCNTMinNTIx ix ixm)- fc' idxm'' = unWFS $ overrideIdx (\idx'' -> WFS $ fc idx'') idx (WFS fsect') idxm''- in fc' idx' idxm'+ fc :: forall ix' ixm'. phi ix' -> phi ixm' -> r (LCNTMinNTIx ix' ixm')+ fc idx' idxm' = f $ LCNTMinNT idx' idxm'+ fsect' :: forall ix'. phi ix' -> r (LCNTMinNTIx ix ix')+ fsect' idxm' = unSubVal $ overrideIdx (MkSubVal . fc idx) idxm (MkSubVal v) idxm'+ fc' :: forall ix' ixm'. phi ix' -> phi ixm' -> r (LCNTMinNTIx ix' ixm')+ fc' idxm' = unWFS $ overrideIdx (\idx' -> WFS $ fc idx') idx (WFS fsect') idxm'+ in fc' idxr idxmr overrideIdx f (LCNTMinT tt idx) v (LCNTMinT tt' idx') = if tt == tt' then unSubVal $ overrideIdx (MkSubVal . f . LCNTMinT tt) idx (MkSubVal v) idx'@@ -138,17 +140,18 @@ EpsProductionRule p, RecProductionRule p (LCDomain phi t) (LCValue r t)) => ProductionRule (TransformLCRule p (LCDomain phi t) (LCValue r t) phi r t) where- ra >>> rb = + (ra :: TransformLCRule p (LCDomain phi t) (LCValue r t) phi r t (a -> b)) >>> rb = let es = tlcEmpty ra <*> tlcEmpty rb emptyA = maybe die epsilon $ tlcEmpty ra f = tlcFull ra >>> tlcFull rb+ rNTMinNT :: phi ix' -> p (r ix' -> b) rNTMinNT idx' = flip $>> tlcNTMinNT ra idx' >>> tlcFull rb ||| (.) $>> emptyA >>> tlcNTMinNT rb idx' rNTMinT tt = flip $>> tlcNTMinT ra tt >>> tlcFull rb ||| (.) $>> emptyA >>> tlcNTMinT rb tt in MkTLCIR es f rNTMinNT rNTMinT - ra ||| rb =+ (ra :: TransformLCRule p (LCDomain phi t) (LCValue r t) phi r t a) ||| rb = let es = case (tlcEmpty ra, tlcEmpty rb) of (Just _, Just _) -> error "Ambiguous: empty disjunction"@@ -156,6 +159,7 @@ (Nothing, Just vb) -> Just vb (Nothing, Nothing) -> Nothing f = tlcFull ra ||| tlcFull rb+ rNTMinNT :: phi ix' -> p (r ix' -> a) rNTMinNT idx' = tlcNTMinNT ra idx' ||| tlcNTMinNT rb idx' rNTMinT tt = tlcNTMinT ra tt ||| tlcNTMinT rb tt in MkTLCIR es f rNTMinNT rNTMinT @@ -192,8 +196,9 @@ EpsProductionRule p, RecProductionRule p (LCDomain phi t) (LCValue r t)) => RecProductionRule (TransformLCRule p (LCDomain phi t) (LCValue r t) phi r t) phi r where- ref idx = + ref (idx :: phi ix) = let f = unLCBV $>> ref (LCBase idx)+ rNTMinNT :: phi ix' -> p (r ix' -> r ix) rNTMinNT idxm = unWNTMinNTP $ overrideIdx (\_ -> WNTMinNTP die) idx (WNTMinNTP $ epsilon id) idxm in MkTLCIR Nothing f rNTMinNT (const die) @@ -206,11 +211,13 @@ manyRef (idx :: phi ix) = let f = map unLCBV $>> manyRef (LCBase idx) rNTMinNTIdx = flip (:) $>> (map unLCBV $>> manyRef (LCBase idx))+ rNTMinNT :: phi ix' -> p (r ix' -> [r ix]) rNTMinNT idxm = unWNTMinNTPs $ overrideIdx (\_ -> WNTMinNTPs die) idx (WNTMinNTPs rNTMinNTIdx) idxm in MkTLCIR Nothing f rNTMinNT (const die) many1Ref (idx :: phi ix) = let f = map unLCBV $>> many1Ref (LCBase idx) rNTMinNTIdx = flip (:) $>> (map unLCBV $>> manyRef (LCBase idx))+ rNTMinNT :: phi ix' -> p (r ix' -> [r ix]) rNTMinNT idxm = unWNTMinNTPs $ overrideIdx (\_ -> WNTMinNTPs die) idx (WNTMinNTPs rNTMinNTIdx) idxm in MkTLCIR Nothing f rNTMinNT (const die) @@ -230,16 +237,20 @@ ruleT tt = flip ($) $>> token tt >>> (unLCNTMinTV $>> ref (LCNTMinT tt idx)) ruleTs = LCBV $>> Set.fold ((|||) . ruleT) die fs in ruleTs -transformLeftCorner' bgram _ (LCNTMinT tt idx) = +transformLeftCorner' bgram _ (LCNTMinT tt (idx :: phi ix')) = let+ bMinT :: phi ixB -> p (ConcreteToken t -> r ix') bMinT idxB = flip (.) $>> tlcNTMinT (bgram idxB) tt >>> (unLCNTMinNTV $>> ref (LCNTMinNT idxB idx)) bMinTs = foldFam ((|||) . bMinT) die in LCNTMinTV $>> bMinTs ||| LCNTMinTV $>> tlcNTMinT (bgram idx) tt-transformLeftCorner' bgram _ (LCNTMinNT idxm idx) = +transformLeftCorner' bgram _ (LCNTMinNT (idxm :: phi ixm) (idx :: phi ix')) = let+ cMinB :: phi ixC -> p (LCValue r t (LCNTMinNTIx ixm ix')) cMinB idxC = LCNTMinNTV $>> (flip (.) $>> tlcNTMinNT (bgram idxC) idxm >>> follow idxC)+ baseFollow :: phi ixC -> p (r ixC -> r ix') baseFollow idxC = unLCNTMinNTV $>> ref (LCNTMinNT idxC idx)+ follow :: phi ixC -> p (r ixC -> r ix') follow idxC = unWNTMinNTP $ overrideIdx (WNTMinNTP . baseFollow) idx (WNTMinNTP $ baseFollow idx ||| epsilon id) idxC in -- flip (|||) produces alternatives in a better order, typically foldFam (flip (|||) . cMinB) die
Text/GrammarCombinators/Transform/PenalizeErrors.hs view
@@ -98,7 +98,7 @@ allJustVs :: phi ix -> PF phi (MaybeSemanticT r) ix -> Bool allJustVs idx' pfv' = unIJA $ hmapA (\_ v -> IJA $ isJustV v) idx' pfv' fromJustVs :: phi ix -> PF phi (MaybeSemanticT r) ix -> PF phi r ix- fromJustVs = hmap (\_ (JustV v) -> v)+ fromJustVs = hmap (\_ -> fromJustV) in if allJustVs idx pfv then JustV $ proc idx $ fromJustVs idx pfv else NothingV
Text/GrammarCombinators/Transform/UnfoldRecursion.hs view
@@ -121,22 +121,6 @@ ProcessingRegularGrammar phi t r unfoldRecursionE gram = unfoldRecursion (unfoldLoops gram) --- instance (ProductionRule p) => SuperProductionRule (RPWRule p) where--- subref subgram idxb = rpwSubRef (subgram idxb) idxb - --- rpwSubRef :: forall p phi phi' supIxT ixT r ix t .--- (DomainEmbedding phi phi' supIxT, HFunctor phi (PF phi), ProductionRule p) =>--- RPWRule p phi' (IxMapSeq ixT supIxT) (SubVal supIxT r) t (PF phi' (SubVal supIxT r) ix) ->--- phi' ix -> phi (supIxT ix) ->--- RPWRule p phi ixT r t (PF phi r (supIxT ix)) --- rpwSubRef (RPWRule subintrule) idxb idx = RPWRule $ \outgram ->--- let--- restrictedGrammar :: forall ix'. phi' ix' -> p ((SubVal supIxT r) ix')--- restrictedGrammar idx' = epsilon MkSubVal >>> outgram (supIx idx')--- presult' :: p (PF phi' (SubVal supIxT r) ix)--- presult' = subintrule restrictedGrammar--- in epsilon (supPF idxb idx) >>> presult'- -- | A value of type UnfoldDepth defines for each non-terminal in a -- grammar how many times it should be unfolded by the 'unfoldSelective' -- or 'unfoldSelectiveE' algorithms.@@ -177,15 +161,15 @@ type RPWGrammar p phi ixT r v t = forall ix. phi ix -> RPWRule p phi ixT r t (v ix) -unfoldSelective' :: (EqFam phi, RecProductionRule p phi r) =>+unfoldSelective' :: forall p phi ixT r t. (EqFam phi, RecProductionRule p phi r) => UnfoldDepth phi -> RPWGrammar p phi ixT r r t -> (forall ix. phi ix -> p (r ix))-unfoldSelective' sel gram idx =- let- rg idx' = if sel idx' > 0- then unfoldSelective' (modifyUnfoldDepth sel (flip (-) 1) idx') gram idx'- else ref idx'+unfoldSelective' sel gram idx =+ let rg :: phi ix' -> p (r ix')+ rg idx' = if sel idx' > 0+ then unfoldSelective' (modifyUnfoldDepth sel (flip (-) 1) idx') gram idx'+ else ref idx' in unRPWRule (gram idx) rg -- | Selectively unfold a given context-free grammar according to a
Text/GrammarCombinators/Transform/UniformPaull.hs view
@@ -146,15 +146,21 @@ MkTUPW $ \_ -> MkTUPIR (const False) (const $ Just $ epsilonL v q) (const die) (const [(True, epsilonL (const v) [| const $(q) |])]) $ epsilonL v q instance (ProductionRule p, LiftableProductionRule p) => ProductionRule (TransformUPWrapper p surrIx (UPDomain phi) (UPValue r) phi ixT r t) where- ra >>> rb = MkTUPW $ \g ->+ (ra :: TransformUPWrapper p surrIx (UPDomain phi) (UPValue r) phi ixT r t (a -> b)) >>>+ rb = MkTUPW $ \g -> let (MkTUPIR rlaa eas ha tas fa) = tUPRuleForGrammar ra g (MkTUPIR rlab ebs hb tbs fb) = tUPRuleForGrammar rb g+ rla :: phi ix -> Bool rla idx = rlaa idx || ((isJust $ eas idx) && rlab idx)+ es :: phi ix -> Maybe (p b) es idx = liftM2 (>>>) (eas idx) (ebs idx)+ hForEmptyA :: phi ix -> p b hForEmptyA idx = case eas idx of Nothing -> die Just rea -> rea >>> hb idx+ h :: phi ix -> p b h idx = hForEmptyA idx ||| ha idx >>> fb+ ts :: phi surrIx -> [(Bool, p (r surrIx -> b))] ts surrIdx = do (ea, ta) <- tas surrIdx if ea@@ -163,11 +169,14 @@ else return (False, epsilonL flip [| flip |] >>> ta >>> fb) f = fa >>> fb in MkTUPIR rla es h ts f- ra ||| rb = MkTUPW $ \g -> + (ra :: TransformUPWrapper p surrIx (UPDomain phi) (UPValue r) phi ixT r t a) ||| rb = MkTUPW $ \g -> let (MkTUPIR rlaa eas ha tas fa) = tUPRuleForGrammar ra g (MkTUPIR rlab ebs hb tbs fb) = tUPRuleForGrammar rb g+ rla :: phi ix -> Bool rla idx = rlaa idx || rlab idx+ es :: phi ix -> Maybe (p a) es idx = liftM2 (|||) (eas idx) (ebs idx)+ h :: phi ix -> p a h idx = ha idx ||| hb idx ts surrIdx = tas surrIdx ++ tbs surrIdx in MkTUPIR rla es h ts $ fa ||| fb@@ -184,9 +193,11 @@ instance (PenaltyProductionRule p) => PenaltyProductionRule (TransformUPWrapper p surrIx (UPDomain phi) (UPValue r) phi ixT r t) where- penalty p r = MkTUPW $ \g ->+ penalty p (r :: TransformUPWrapper p surrIx (UPDomain phi) (UPValue r) phi ixT r t a) = MkTUPW $ \g -> let (MkTUPIR rla es h ts f) = tUPRuleForGrammar r g+ es' :: phi ix -> Maybe (p a) es' idx = liftM (penalty p) (es idx)+ h' :: phi ix -> p a h' idx = penalty p (h idx) in MkTUPIR rla es' h' ts $ penalty p f @@ -244,6 +255,7 @@ (hForEmptyHead idx' ||| ha idx') >>> tlclTailRef idx else f+ es :: forall ix'. phi ix' -> Maybe (p (r ix)) es idx' = if rla idx' -- use True to turn off optimization then eas idx' else Nothing
Text/GrammarCombinators/Utils/ToGraph.hs view
@@ -171,8 +171,5 @@ gr String String reachableGrammarToGraph depth gram idx = grammarToGraph (foldReachable gram idx) depth gram -void :: (Monad m) => m a -> m ()-void m = m >> return ()- showGraph :: (DotRepr dg n) => dg n -> IO () showGraph gr = void $ runGraphvizCanvas' gr Xlib
Text/GrammarCombinators/Utils/UnfoldDepthFirst.hs view
@@ -41,8 +41,7 @@ many1Ref' :: phi ix -> p (rr ix) -> p [r ix] newtype UnfoldDepthFirstRule p (phi :: * -> *) (r :: * -> *) t (rr :: * -> *) v = MkFRR {- foldReachableFromRule :: UDFGrammar p phi r t rr ->- p v+ foldReachableFromRule :: UDFGrammar p phi r t rr -> p v } type UDFGrammar p phi r t rr =@@ -137,7 +136,7 @@ SimpleLoopProductionRule p phi r rr) => GAnyExtendedContextFreeGrammar phi t r rr -> phi ix -> p (rr ix)-unfoldDepthFirstProper grammar = unfoldDepthFirst' grammar id +unfoldDepthFirstProper grammar = unfoldDepthFirst' grammar (\g -> g) unfoldDepthFirst :: forall p phi r rr t ix. (ProductionRule p, EqFam phi,@@ -149,5 +148,5 @@ SimpleLoopProductionRule p phi r rr) => GAnyExtendedContextFreeGrammar phi t r rr -> phi ix -> p (r ix)-unfoldDepthFirst grammar idx = unfoldDepthFirst'' (ref idx) grammar id +unfoldDepthFirst grammar idx = unfoldDepthFirst'' (ref idx) grammar (\g -> g)
+ changelog view
@@ -0,0 +1,4 @@+-*-change-log-*-++0.2.2 Dominique Devriese <dominique.devriese@gmail.com> Jan 2011+ * Make it compile with GHC 7
grammar-combinators.cabal view
@@ -1,5 +1,5 @@ Name: grammar-combinators-Version: 0.2.1+Version: 0.2.2 Description: The grammar-combinators library is a novel parsing library using an explicit representation of recursion to provide various novel@@ -14,7 +14,7 @@ Category: Parsing Synopsis: A parsing library of context-free grammar combinators. Cabal-Version: >=1.2.1-Extra-Source-Files: COPYING.GPL +Extra-Source-Files: COPYING.GPL, changelog Stability: experimental Library