

module AbsRl where

-- Haskell module generated by the BNF converter




newtype Ident = Ident String deriving (Eq, Ord, Show, Read)
data Rl = RLBLK1 | RLBLK Rlblk Rl
  deriving (Eq, Ord, Show, Read)

data Rlblk = RBlk1 Label From Jump | RBlk2 Label From Step Jump
  deriving (Eq, Ord, Show, Read)

data Jump = RGoto Label | RIf Exp Label Label | RExit
  deriving (Eq, Ord, Show, Read)

data From = RFrom Label | RFi Exp Label Label | REntry
  deriving (Eq, Ord, Show, Read)

data Label = Label Integer
  deriving (Eq, Ord, Show, Read)

data Step
    = Plus_Eq Var Oplus Exp
    | Plus_In Var Exp Oplus Exp
    | Push Var Var
    | Pop Var Var
    | Skip
  deriving (Eq, Ord, Show, Read)

data Exp
    = EConst Integer
    | EVar Ident
    | EIn Var Exp
    | ETime Exp Otime Exp
    | ETop Var Var
    | EEmpty Var Var
  deriving (Eq, Ord, Show, Read)

data Otime
    = OPlus Oplus
    | Time
    | Div
    | Equal
    | Less
    | Greater
    | Less_Eq
    | Greater_Eq
    | Not_Eq
  deriving (Eq, Ord, Show, Read)

data Oplus = Plus | Minus | Caret
  deriving (Eq, Ord, Show, Read)

data Var = Var Ident
  deriving (Eq, Ord, Show, Read)

