hydra-0.1.0: src/main/haskell/Hydra/Impl/Haskell/Dsl/Grammars.hs
module Hydra.Impl.Haskell.Dsl.Grammars where
import Hydra.All
import Data.String(IsString(..))
instance IsString Pattern where fromString = symbol
infixr 0 >:
(>:) :: String -> Pattern -> Pattern
l >: p = PatternLabeled $ LabeledPattern (Label l) p
alts :: [Pattern] -> Pattern
alts = PatternAlternatives
define :: String -> [Pattern] -> Production
define s pats = Production (Symbol s) pat
where
pat = case pats of
[p] -> p
_ -> alts pats
ignored :: Pattern -> Pattern
ignored = PatternIgnored
list :: [Pattern] -> Pattern
list = PatternSequence
nil :: Pattern
nil = PatternNil
opt :: Pattern -> Pattern
opt = PatternOption
plus :: Pattern -> Pattern
plus = PatternPlus
regex :: String -> Pattern
regex = PatternRegex . Regex
star :: Pattern -> Pattern
star = PatternStar
symbol :: String -> Pattern
symbol = PatternNonterminal . Symbol
terminal :: String -> Pattern
terminal = PatternConstant . Constant