hydra-0.1.0: src/main/haskell/Hydra/Impl/Haskell/Sources/Grammar.hs
-- | A model for Hydra labeled-BNF grammars
module Hydra.Impl.Haskell.Sources.Grammar where
import Hydra.All
import Hydra.Impl.Haskell.Dsl.Types as Types
import Hydra.Impl.Haskell.Dsl.Standard
import Hydra.Impl.Haskell.Sources.Core
hydraGrammarModule :: Module Meta
hydraGrammarModule = Module ns elements [] $
Just "A common API for BNF-based grammars"
where
ns = Namespace "hydra/grammar"
grammar = nsref ns
def = datatype ns
elements = [
def "Constant" string,
def "Grammar" $ list $ grammar "Production",
def "Label" string,
def "LabeledPattern" $ record [
"label">: grammar "Label",
"pattern">: grammar "Pattern"],
def "Pattern" $ union [
"nil">: unit,
"ignored">: grammar "Pattern",
"labeled">: grammar "LabeledPattern",
"constant">: grammar "Constant",
"regex">: grammar "Regex",
"nonterminal">: grammar "Symbol",
"sequence">: list $ grammar "Pattern",
"alternatives">: list $ grammar "Pattern",
"option">: grammar "Pattern",
"star">: grammar "Pattern",
"plus">: grammar "Pattern"],
def "Production" $ record [
"symbol">: grammar "Symbol",
"pattern">: grammar "Pattern"],
def "Regex" string,
def "Symbol" string]