-- Haskel data types for the abstract syntax. -- Generated by the BNF converter. {-# LANGUAGE GeneralizedNewtypeDeriving #-} -- | The abstract syntax of language GF. module AbsGF where import qualified Prelude as T (Integer, String) import qualified Prelude as C (Eq, Ord, Show, Read) import Data.String data Grammar = Gr [ModDef] -- ^ Grammar ::= ModDef deriving (C.Eq, C.Ord, C.Show, C.Read) data ModDef = MMain Ident Ident [ConcSpec] -- ^ ModDef ::= "grammar" Ident "=" "{" "abstract" "=" Ident ";" ConcSpec "}" | MModule ComplMod ModType ModBody -- ^ ModDef ::= ComplMod ModType "=" ModBody deriving (C.Eq, C.Ord, C.Show, C.Read) data ConcSpec = ConcSpecC Ident ConcExp -- ^ ConcSpec ::= Ident "=" ConcExp deriving (C.Eq, C.Ord, C.Show, C.Read) data ConcExp = ConcExpC Ident [Transfer] -- ^ ConcExp ::= Ident Transfer deriving (C.Eq, C.Ord, C.Show, C.Read) data Transfer = TransferIn OpenDecl -- ^ Transfer ::= "(" "transfer" "in" OpenDecl ")" | TransferOut OpenDecl -- ^ Transfer ::= "(" "transfer" "out" OpenDecl ")" deriving (C.Eq, C.Ord, C.Show, C.Read) data ModType = MTAbstract Ident -- ^ ModType ::= "abstract" Ident | MTConcrete Ident Ident -- ^ ModType ::= "concrete" Ident "of" Ident | MTInstance Ident Ident -- ^ ModType ::= "instance" Ident "of" Ident | MTInterface Ident -- ^ ModType ::= "interface" Ident | MTResource Ident -- ^ ModType ::= "resource" Ident | MTTransfer Ident OpenDecl OpenDecl -- ^ ModType ::= "transfer" Ident ":" OpenDecl "->" OpenDecl deriving (C.Eq, C.Ord, C.Show, C.Read) data ModBody = MBody Extend Opens [TopDef] -- ^ ModBody ::= Extend Opens "{" TopDef "}" | MReuse Ident -- ^ ModBody ::= "reuse" Ident | MUnion [Included] -- ^ ModBody ::= "union" Included | MWith Ident [OpenDecl] -- ^ ModBody ::= Ident "with" OpenDecl | MWithE [Included] Ident [OpenDecl] -- ^ ModBody ::= Included "**" Ident "with" OpenDecl deriving (C.Eq, C.Ord, C.Show, C.Read) data Extend = Ext [Included] -- ^ Extend ::= Included "**" | NoExt -- ^ Extend ::= deriving (C.Eq, C.Ord, C.Show, C.Read) data Opens = NoOpens -- ^ Opens ::= | OpenIn [OpenDecl] -- ^ Opens ::= "open" OpenDecl "in" deriving (C.Eq, C.Ord, C.Show, C.Read) data OpenDecl = OName Ident -- ^ OpenDecl ::= Ident | OQual QualOpen Ident Ident -- ^ OpenDecl ::= "(" QualOpen Ident "=" Ident ")" | OQualQO QualOpen Ident -- ^ OpenDecl ::= "(" QualOpen Ident ")" deriving (C.Eq, C.Ord, C.Show, C.Read) data ComplMod = CMCompl -- ^ ComplMod ::= | CMIncompl -- ^ ComplMod ::= "incomplete" deriving (C.Eq, C.Ord, C.Show, C.Read) data QualOpen = QOCompl -- ^ QualOpen ::= | QOIncompl -- ^ QualOpen ::= "incomplete" | QOInterface -- ^ QualOpen ::= "interface" deriving (C.Eq, C.Ord, C.Show, C.Read) data Included = IAll Ident -- ^ Included ::= Ident | IMinus Ident [Ident] -- ^ Included ::= Ident "-" "[" Ident "]" | ISome Ident [Ident] -- ^ Included ::= Ident "[" Ident "]" deriving (C.Eq, C.Ord, C.Show, C.Read) data Def = DDeclC [Name] Exp -- ^ Def ::= Name ":" Exp | DDef [Name] Exp -- ^ Def ::= Name "=" Exp | DFull [Name] Exp Exp -- ^ Def ::= Name ":" Exp "=" Exp | DPatt Name [Patt] Exp -- ^ Def ::= Name Patt "=" Exp deriving (C.Eq, C.Ord, C.Show, C.Read) data TopDef = DefCat [CatDef] -- ^ TopDef ::= "cat" CatDef | DefData [DataDef] -- ^ TopDef ::= "data" DataDef | DefDef [Def] -- ^ TopDef ::= "def" Def | DefFlag [FlagDef] -- ^ TopDef ::= "flags" FlagDef | DefFun [FunDef] -- ^ TopDef ::= "fun" FunDef | DefFunData [FunDef] -- ^ TopDef ::= "data" FunDef | DefLin [Def] -- ^ TopDef ::= "lin" Def | DefLincat [PrintDef] -- ^ TopDef ::= "lincat" PrintDef | DefLindef [Def] -- ^ TopDef ::= "lindef" Def | DefLintype [Def] -- ^ TopDef ::= "lintype" Def | DefOper [Def] -- ^ TopDef ::= "oper" Def | DefPackage Ident [TopDef] -- ^ TopDef ::= "package" Ident "=" "{" TopDef "}" ";" | DefPar [ParDef] -- ^ TopDef ::= "param" ParDef | DefPattern [Def] -- ^ TopDef ::= "pattern" Def | DefPrintCat [PrintDef] -- ^ TopDef ::= "printname" "cat" PrintDef | DefPrintFun [PrintDef] -- ^ TopDef ::= "printname" "fun" PrintDef | DefPrintOld [PrintDef] -- ^ TopDef ::= "printname" PrintDef | DefTokenizer Ident -- ^ TopDef ::= "tokenizer" Ident ";" | DefTrans [Def] -- ^ TopDef ::= "transfer" Def | DefVars [Def] -- ^ TopDef ::= "var" Def deriving (C.Eq, C.Ord, C.Show, C.Read) data CatDef = ListCatDefC Ident [DDecl] -- ^ CatDef ::= "[" Ident DDecl "]" | ListSizeCatDef Ident [DDecl] T.Integer -- ^ CatDef ::= "[" Ident DDecl "]" "{" Integer "}" | SimpleCatDef Ident [DDecl] -- ^ CatDef ::= Ident DDecl deriving (C.Eq, C.Ord, C.Show, C.Read) data FunDef = FunDefC [Ident] Exp -- ^ FunDef ::= Ident ":" Exp deriving (C.Eq, C.Ord, C.Show, C.Read) data DataDef = DataDefC Ident [DataConstr] -- ^ DataDef ::= Ident "=" DataConstr deriving (C.Eq, C.Ord, C.Show, C.Read) data DataConstr = DataId Ident -- ^ DataConstr ::= Ident | DataQId Ident Ident -- ^ DataConstr ::= Ident "." Ident deriving (C.Eq, C.Ord, C.Show, C.Read) data ParDef = ParDefAbs Ident -- ^ ParDef ::= Ident | ParDefDir Ident [ParConstr] -- ^ ParDef ::= Ident "=" ParConstr | ParDefIndir Ident Ident -- ^ ParDef ::= Ident "=" "(" "in" Ident ")" deriving (C.Eq, C.Ord, C.Show, C.Read) data ParConstr = ParConstrC Ident [DDecl] -- ^ ParConstr ::= Ident DDecl deriving (C.Eq, C.Ord, C.Show, C.Read) data PrintDef = PrintDefC [Name] Exp -- ^ PrintDef ::= Name "=" Exp deriving (C.Eq, C.Ord, C.Show, C.Read) data FlagDef = FlagDefC Ident Ident -- ^ FlagDef ::= Ident "=" Ident deriving (C.Eq, C.Ord, C.Show, C.Read) data Name = IdentName Ident -- ^ Name ::= Ident | ListNameC Ident -- ^ Name ::= "[" Ident "]" deriving (C.Eq, C.Ord, C.Show, C.Read) data LocDef = LDDecl [Ident] Exp -- ^ LocDef ::= Ident ":" Exp | LDDef [Ident] Exp -- ^ LocDef ::= Ident "=" Exp | LDFull [Ident] Exp Exp -- ^ LocDef ::= Ident ":" Exp "=" Exp deriving (C.Eq, C.Ord, C.Show, C.Read) data Exp = EAbstr [Bind] Exp -- ^ Exp ::= "\\" Bind "->" Exp | EApp Exp Exp -- ^ Exp ::= Exp2 Exp3 | ECTable [Bind] Exp -- ^ Exp ::= "\\" "\\" Bind "=>" Exp | ECase Exp [Case] -- ^ Exp ::= "case" Exp "of" "{" Case "}" | EConAt Ident Exp -- ^ Exp ::= Ident "@" Exp4 | EConcat Exp Exp -- ^ Exp ::= Exp1 "++" Exp | ECons Ident -- ^ Exp ::= "%" Ident "%" | EConstr Ident -- ^ Exp ::= "{" Ident "}" | EData -- ^ Exp ::= "data" | EEmpty -- ^ Exp ::= "[" "]" | EEqs [Equation] -- ^ Exp ::= "fn" "{" Equation "}" | EExtend Exp Exp -- ^ Exp ::= Exp1 "**" Exp2 | EGlue Exp Exp -- ^ Exp ::= Exp1 "+" Exp | EIdent Ident -- ^ Exp ::= Ident | EIndir Ident -- ^ Exp ::= "(" "in" Ident ")" | EInt T.Integer -- ^ Exp ::= Integer | ELString LString -- ^ Exp ::= LString | ELet [LocDef] Exp -- ^ Exp ::= "let" "{" LocDef "}" "in" Exp | ELetb [LocDef] Exp -- ^ Exp ::= "let" LocDef "in" Exp | ELin Ident -- ^ Exp ::= "Lin" Ident | EList Ident Exps -- ^ Exp ::= "[" Ident Exps "]" | EMeta -- ^ Exp ::= "?" | EPre Exp [Altern] -- ^ Exp ::= "pre" "{" Exp ";" Altern "}" | EProd Decl Exp -- ^ Exp ::= Decl "->" Exp | EProj Exp Label -- ^ Exp ::= Exp3 "." Label | EQCons Ident Ident -- ^ Exp ::= "%" Ident "." Ident | EQConstr Ident Ident -- ^ Exp ::= "{" Ident "." Ident "}" | ERecord [LocDef] -- ^ Exp ::= "{" LocDef "}" | ESelect Exp Exp -- ^ Exp ::= Exp1 "!" Exp2 | ESort Sort -- ^ Exp ::= Sort | EString T.String -- ^ Exp ::= String | EStrings T.String -- ^ Exp ::= "[" String "]" | EStrs [Exp] -- ^ Exp ::= "strs" "{" Exp "}" | ETTable Exp [Case] -- ^ Exp ::= "table" Exp4 "{" Case "}" | ETType Exp Exp -- ^ Exp ::= Exp1 "=>" Exp | ETable [Case] -- ^ Exp ::= "table" "{" Case "}" | ETupTyp Exp Exp -- ^ Exp ::= Exp1 "*" Exp2 | ETuple [TupleComp] -- ^ Exp ::= "<" TupleComp ">" | ETyped Exp Exp -- ^ Exp ::= "<" Exp ":" Exp ">" | EVTable Exp [Exp] -- ^ Exp ::= "table" Exp4 "[" Exp "]" | EVariants [Exp] -- ^ Exp ::= "variants" "{" Exp "}" | EWhere Exp [LocDef] -- ^ Exp ::= Exp1 "where" "{" LocDef "}" deriving (C.Eq, C.Ord, C.Show, C.Read) data Exps = ConsExp Exp Exps -- ^ Exps ::= Exp4 Exps | NilExp -- ^ Exps ::= deriving (C.Eq, C.Ord, C.Show, C.Read) data Patt = PC Ident [Patt] -- ^ Patt ::= Ident Patt | PCon Ident -- ^ Patt ::= "{" Ident "}" | PInt T.Integer -- ^ Patt ::= Integer | PQ Ident Ident -- ^ Patt ::= Ident "." Ident | PQC Ident Ident [Patt] -- ^ Patt ::= Ident "." Ident Patt | PR [PattAss] -- ^ Patt ::= "{" PattAss "}" | PStr T.String -- ^ Patt ::= String | PTup [PattTupleComp] -- ^ Patt ::= "<" PattTupleComp ">" | PV Ident -- ^ Patt ::= Ident | PW -- ^ Patt ::= "_" deriving (C.Eq, C.Ord, C.Show, C.Read) data PattAss = PA [Ident] Patt -- ^ PattAss ::= Ident "=" Patt deriving (C.Eq, C.Ord, C.Show, C.Read) data Label = LIdent Ident -- ^ Label ::= Ident | LVar T.Integer -- ^ Label ::= "$" Integer deriving (C.Eq, C.Ord, C.Show, C.Read) data Sort = Sort_PType -- ^ Sort ::= "PType" | Sort_Str -- ^ Sort ::= "Str" | Sort_Strs -- ^ Sort ::= "Strs" | Sort_Tok -- ^ Sort ::= "Tok" | Sort_Type -- ^ Sort ::= "Type" deriving (C.Eq, C.Ord, C.Show, C.Read) data PattAlt = AltP Patt -- ^ PattAlt ::= Patt deriving (C.Eq, C.Ord, C.Show, C.Read) data Bind = BIdent Ident -- ^ Bind ::= Ident | BWild -- ^ Bind ::= "_" deriving (C.Eq, C.Ord, C.Show, C.Read) data Decl = DDec [Bind] Exp -- ^ Decl ::= "(" Bind ":" Exp ")" | DExp Exp -- ^ Decl ::= Exp2 deriving (C.Eq, C.Ord, C.Show, C.Read) data TupleComp = TComp Exp -- ^ TupleComp ::= Exp deriving (C.Eq, C.Ord, C.Show, C.Read) data PattTupleComp = PTComp Patt -- ^ PattTupleComp ::= Patt deriving (C.Eq, C.Ord, C.Show, C.Read) data Case = CaseC [PattAlt] Exp -- ^ Case ::= PattAlt "=>" Exp deriving (C.Eq, C.Ord, C.Show, C.Read) data Equation = Equ [Patt] Exp -- ^ Equation ::= Patt "->" Exp deriving (C.Eq, C.Ord, C.Show, C.Read) data Altern = Alt Exp Exp -- ^ Altern ::= Exp "/" Exp deriving (C.Eq, C.Ord, C.Show, C.Read) data DDecl = DDDec [Bind] Exp -- ^ DDecl ::= "(" Bind ":" Exp ")" | DDExp Exp -- ^ DDecl ::= Exp4 deriving (C.Eq, C.Ord, C.Show, C.Read) data OldGrammar = OldGr IncludeDecl [TopDef] -- ^ OldGrammar ::= IncludeDecl TopDef deriving (C.Eq, C.Ord, C.Show, C.Read) data IncludeDecl = Incl [FileName] -- ^ IncludeDecl ::= "include" FileName | NoIncl -- ^ IncludeDecl ::= deriving (C.Eq, C.Ord, C.Show, C.Read) data FileName = FAddId Ident FileName -- ^ FileName ::= Ident FileName | FDot FileName -- ^ FileName ::= "." FileName | FIdent Ident -- ^ FileName ::= Ident | FMinus FileName -- ^ FileName ::= "-" FileName | FSlash FileName -- ^ FileName ::= "/" FileName | FString T.String -- ^ FileName ::= String 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) newtype LString = LString T.String deriving (C.Eq, C.Ord, C.Show, C.Read, Data.String.IsString)