packages feed

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]