module Language.Abs where

-- Haskell module generated by the BNF converter




newtype Ident = Ident String deriving (Eq,Ord,Show,Read)
newtype VerIdent = VerIdent String deriving (Eq,Ord,Show,Read)
newtype RouteIdent = RouteIdent String deriving (Eq,Ord,Show,Read)
data Specification =
   Spec Name Version Modules [EnumType] [StructType] [Resource]
  deriving (Eq,Ord,Show,Read)

data Name =
   Nm Ident
  deriving (Eq,Ord,Show,Read)

data Version =
   Ver VerIdent
  deriving (Eq,Ord,Show,Read)

data Modules =
   EmptyMods
 | Mods [Ident]
  deriving (Eq,Ord,Show,Read)

data EnumType =
   DefEnum Ident [EnumVal]
  deriving (Eq,Ord,Show,Read)

data StructType =
   DefStr Ident [Field]
  deriving (Eq,Ord,Show,Read)

data Resource =
   Res Ident RouteIdent Mode
  deriving (Eq,Ord,Show,Read)

data Mode =
   ReadOnly
 | Write
  deriving (Eq,Ord,Show,Read)

data Field =
   FDef [Annotation] Ident FType
  deriving (Eq,Ord,Show,Read)

data FType =
   FString
 | FInt
 | FLong
 | FDouble
 | FDefined Ident
 | FList FType
  deriving (Eq,Ord,Show,Read)

data Annotation =
   Ann Ident
  deriving (Eq,Ord,Show,Read)

data EnumVal =
   EnVal Ident
  deriving (Eq,Ord,Show,Read)