content: -- File generated by the BNF Converter (bnfc 2.9.5).
  
  {-# LANGUAGE GeneralizedNewtypeDeriving #-}
  
  -- | The abstract syntax of language RawPVSLang.
  
  module AbsRawPVSLang where
  
  import Prelude (Double, Integer, String)
  import qualified Prelude as C (Eq, Ord, Show, Read)
  import qualified Data.String
  
  data ElsIf = ElsIf Expr Expr
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data LetElem = LetElem Id Expr | LetElemType Id Type Expr
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data RecordElem = RecordElem Id Expr
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data LambdaKeyWord = LambdaWord1 | LambdaWord2
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data LambdaExpr = Lambda LambdaKeyWord Id Expr Expr Id Type Expr
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data Expr
      = Let [LetElem] Expr
      | Or Expr Expr
      | And Expr Expr
      | Not Expr
      | Eq Expr Expr
      | Neq Expr Expr
      | Lt Expr Expr
      | LtE Expr Expr
      | Gt Expr Expr
      | GtE Expr Expr
      | ExprAdd Expr Expr
      | ExprSub Expr Expr
      | ExprMul Expr Expr
      | ExprDiv Expr Expr
      | With Expr Expr Expr
      | ExprNeg Expr
      | ExprPow Expr Expr
      | If Expr Expr Expr
      | ListIf Expr Expr [ElsIf] Expr
      | For Expr Expr Expr LambdaExpr
      | ForDown Expr Expr Expr LambdaExpr
      | TupleIndex Id Integer
      | RecordField Id Id
      | TupleFunIndex Id [Expr] Integer
      | RecordFunField Id [Expr] Id
      | RecordExpr [RecordElem]
      | TupleExpr [Expr]
      | Call Id [Expr]
      | ExprId Id
      | Int Integer
      | Rat Double
      | BTrue
      | BFalse
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data FieldDecls = FieldDecls Id Type
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data Type
      = TypeSimple Id
      | ParametricTypeBi Id Integer Integer
      | TypeBelow Expr
      | TypeRecord [FieldDecls]
      | TypeTuple [Type]
      | TypeArray [Type] Type
      | TypeFun [Type] Type
      | TypeFun2 [Type] Type
      | TypeList Type
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data Arg = FArg [Id] Type | FArgGuard [Id] Type Expr
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data Args = FArgs [Arg] | FArgsNoType [Id]
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data Decl = DeclN Id Args Type Expr | Decl0 Id Type Expr
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data Imp = LibImp [Id]
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data Program = ProgImp Id Imp [Decl] Id | Prog Id [Decl] Id
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  newtype Id = Id String
    deriving (C.Eq, C.Ord, C.Show, C.Read, Data.String.IsString)
  
  