packages feed

Grempa 0.1.1 → 0.1.2

raw patch · 2 files changed

+27/−1 lines, 2 files

Files

Data/Parser/Grempa/Grammar/Levels.hs view
@@ -30,9 +30,35 @@  type RStateT s m a = ReverseT (StateT s m) a +-- | Start a levels block. Usage:+--+-- > expr <- levels $ do+-- >   rec+-- >     e <- lrule [ Plus  <@> e <# '+' <#> t ]+-- >     t <- lrule [ Times <@> t <# '*' <#> f ]+-- >     f <- lrule [ Var   <@ 'x'+-- >                , id    <@ '(' <#> e <# ')']+-- >   return e+--+-- is equivalent to+--+-- > e <- rule [ Plus  <@> e <# '+' <#> t +-- >           , id    <@> t+-- >           ]+-- > t <- rule [ Times <@> t <# '*' <#> f +-- >           , id    <@> f+-- >           ]+-- > f <- rule [ Var   <@ 'x'+-- >           , id    <@ '(' <#> e <# ')'+-- >           ]+--+-- Put simply, every lrule save for the last one gets an additional identity+-- production pointing to the next lrule. This is a common pattern when+-- creating grammars with precedence levels. levels :: Monad m => RStateT (Maybe a) m r -> m r levels = flip evalStateT Nothing . runReverseT +-- | A rule in a levels block lrule :: (Typeable a, Typeable t)       => Rule t a       -> RStateT (Maybe (RId t a)) (GrammarState t) (RId t a)
Grempa.cabal view
@@ -1,5 +1,5 @@ Name:                Grempa-Version:             0.1.1+Version:             0.1.2 Synopsis:            Embedded grammar DSL and LALR parser generator Description:     A library for expressing programming language grammars in a form similar