-- Haskel data types for the abstract syntax. -- Generated by the BNF converter. {-# LANGUAGE GeneralizedNewtypeDeriving #-} -- | The abstract syntax of language LBNF. module AbsLBNF where import qualified Prelude as T (Char, Integer, String) import qualified Prelude as C (Eq, Ord, Show, Read) import Data.String data Grammar = MkGrammar [Def] -- ^ Grammar ::= Def deriving (C.Eq, C.Ord, C.Show, C.Read) data Def = Coercions Ident T.Integer -- ^ Def ::= "coercions" Ident Integer | Comment T.String -- ^ Def ::= "comment" String | Comments T.String T.String -- ^ Def ::= "comment" String String | Entryp [Ident] -- ^ Def ::= "entrypoints" Ident | Internal Label Cat [Item] -- ^ Def ::= "internal" Label "." Cat "::=" Item | Layout [T.String] -- ^ Def ::= "layout" String | LayoutStop [T.String] -- ^ Def ::= "layout" "stop" String | LayoutTop -- ^ Def ::= "layout" "toplevel" | PosToken Ident Reg -- ^ Def ::= "position" "token" Ident Reg | Rule Label Cat [Item] -- ^ Def ::= Label "." Cat "::=" Item | Rules Ident [RHS] -- ^ Def ::= "rules" Ident "::=" RHS | Separator MinimumSize Cat T.String -- ^ Def ::= "separator" MinimumSize Cat String | Terminator MinimumSize Cat T.String -- ^ Def ::= "terminator" MinimumSize Cat String | Token Ident Reg -- ^ Def ::= "token" Ident Reg deriving (C.Eq, C.Ord, C.Show, C.Read) data Item = NTerminal Cat -- ^ Item ::= Cat | Terminal T.String -- ^ Item ::= String deriving (C.Eq, C.Ord, C.Show, C.Read) data Cat = IdCat Ident -- ^ Cat ::= Ident | ListCat Cat -- ^ Cat ::= "[" Cat "]" deriving (C.Eq, C.Ord, C.Show, C.Read) data Label = LabF LabelId LabelId -- ^ Label ::= LabelId LabelId | LabNoP LabelId -- ^ Label ::= LabelId | LabP LabelId [ProfItem] -- ^ Label ::= LabelId ProfItem | LabPF LabelId LabelId [ProfItem] -- ^ Label ::= LabelId LabelId ProfItem deriving (C.Eq, C.Ord, C.Show, C.Read) data LabelId = Id Ident -- ^ LabelId ::= Ident | ListCons -- ^ LabelId ::= "(" ":" ")" | ListE -- ^ LabelId ::= "[" "]" | ListOne -- ^ LabelId ::= "(" ":" "[" "]" ")" | Wild -- ^ LabelId ::= "_" deriving (C.Eq, C.Ord, C.Show, C.Read) data ProfItem = ProfIt [IntList] [T.Integer] -- ^ ProfItem ::= "(" "[" IntList "]" "," "[" Integer "]" ")" deriving (C.Eq, C.Ord, C.Show, C.Read) data IntList = Ints [T.Integer] -- ^ IntList ::= "[" Integer "]" deriving (C.Eq, C.Ord, C.Show, C.Read) data RHS = MkRHS [Item] -- ^ RHS ::= Item deriving (C.Eq, C.Ord, C.Show, C.Read) data MinimumSize = MEmpty -- ^ MinimumSize ::= | MNonempty -- ^ MinimumSize ::= "nonempty" deriving (C.Eq, C.Ord, C.Show, C.Read) data Reg = RAlt Reg Reg -- ^ Reg ::= Reg1 "|" Reg2 | RAlts T.String -- ^ Reg ::= "[" String "]" | RAny -- ^ Reg ::= "char" | RChar T.Char -- ^ Reg ::= Char | RDigit -- ^ Reg ::= "digit" | REps -- ^ Reg ::= "eps" | RLetter -- ^ Reg ::= "letter" | RLower -- ^ Reg ::= "lower" | RMinus Reg Reg -- ^ Reg ::= Reg2 "-" Reg2 | ROpt Reg -- ^ Reg ::= Reg3 "?" | RPlus Reg -- ^ Reg ::= Reg3 "+" | RSeq Reg Reg -- ^ Reg ::= Reg2 Reg3 | RSeqs T.String -- ^ Reg ::= "{" String "}" | RStar Reg -- ^ Reg ::= Reg3 "*" | RUpper -- ^ Reg ::= "upper" deriving (C.Eq, C.Ord, C.Show, C.Read) newtype Ident = Ident T.String deriving (C.Eq, C.Ord, C.Show, C.Read, Data.String.IsString)