content: -- File generated by the BNF Converter (bnfc 2.9.5).
  
  {-# LANGUAGE GeneralizedNewtypeDeriving #-}
  
  -- | The abstract syntax of language FPCoreLang.
  
  module AbsFPCoreLang where
  
  import Prelude (String)
  import qualified Prelude as C (Eq, Ord, Show, Read)
  import qualified Data.String
  
  data FPCore
      = FProgram Symbol [Argument] [Property] Expr
      | FProgramSymbless [Argument] [Property] Expr
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data Property = Prop Symbol Data
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data Argument
      = ASym Symbol
      | ASymDim Symbol [Dimension]
      | AProp [Property] Symbol [Dimension]
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data Dimension = DimSym Symbol | DimNum Number
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data Expr
      = ExNum Number
      | ExConst Constant
      | ExSym Symbol
      | ExOp Operation Expr [Expr]
      | ExIf Expr Expr Expr
      | ExLet [SymEx] Expr
      | ExLetStar [SymEx] Expr
      | ExWhile Expr [SymExEx] Expr
      | ExWhileStar Expr [SymExEx] Expr
      | ExFor [SymEx] [SymExEx] Expr
      | ExForStar [SymEx] [SymExEx] Expr
      | ExTensor [SymEx] Expr
      | ExTensorStar [SymEx] [SymExEx] Expr
      | ExCast Expr
      | ExArray [Expr]
      | ExProp [Property] Expr
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data Number
      = NRat Rational
      | NDecNum DecNum
      | NHexNum HexNum
      | NDigits DecNum DecNum DecNum
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data Data
      = DStr String | DExpr Expr | DArr [Data] | DBind SymEx [SymEx]
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data SymEx = SymExPair Symbol Expr
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data SymExEx = SymExExTriple Symbol Expr Expr
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data Operation
      = PlusOp
      | MinusOp
      | MulOp
      | DivOp
      | FabsOp
      | FmaOp
      | ExpOp
      | Exp2Op
      | Expm1Op
      | LogOp
      | Log10Op
      | Log2Op
      | Log1pOp
      | PowOp
      | SqrtOp
      | CbrtOp
      | HypotOp
      | SinOp
      | CosOp
      | TanOp
      | AsinOp
      | AcosOp
      | AtanOp
      | Atan2Op
      | SinhOp
      | CoshOp
      | TanhOp
      | AsinhOp
      | AcoshOp
      | AtanhOp
      | ErfOp
      | ErfcOp
      | TgammaOp
      | LgammaOp
      | CeilOp
      | FloorOp
      | FmodOp
      | RemainderOp
      | FmaxOp
      | FminOp
      | FdimOp
      | CopysignOp
      | TruncOp
      | RoundOp
      | NearbyintOp
      | LTOp
      | GTOp
      | LTEOp
      | GTEOp
      | EqualOp
      | NEqualOp
      | AndOp
      | OrOp
      | NotOp
      | IsfiniteOp
      | IsinfOp
      | IsnanOp
      | IsnormalOp
      | SignbitOp
      | DimOp
      | SizeOp
      | RefOp
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  data Constant
      = EConst
      | LOG2EConst
      | LOG10EConst
      | LN2Const
      | LN10Const
      | PIConst
      | PI_2Const
      | PI_4Const
      | M_1_PIConst
      | M_2_PIConst
      | M_2_SQRTPIConst
      | SQRT2Const
      | SQRT1_2Const
      | INFINITYConst
      | NANConst
      | TRUEConst
      | FALSEConst
    deriving (C.Eq, C.Ord, C.Show, C.Read)
  
  newtype Rational = Rational String
    deriving (C.Eq, C.Ord, C.Show, C.Read, Data.String.IsString)
  
  newtype DecNum = DecNum String
    deriving (C.Eq, C.Ord, C.Show, C.Read, Data.String.IsString)
  
  newtype HexNum = HexNum String
    deriving (C.Eq, C.Ord, C.Show, C.Read, Data.String.IsString)
  
  newtype Symbol = Symbol String
    deriving (C.Eq, C.Ord, C.Show, C.Read, Data.String.IsString)
  
  