--------------------------------------------------------------------
-- |
-- Module : Language.While.Types
--
-- Provides shared type definitions forming the parsed AST.
--

module Language.While.Types where

-- | Variables type alias.
type Varname = String

-- | Arithmetic expressions, including integer division.
data Aexp
  = Numeral Integer
  | Variable Varname 
  | Aadd Aexp Aexp
  | Asub Aexp Aexp
  | Amul Aexp Aexp
  | Adiv Aexp Aexp
  deriving (Show, Eq)


-- | Boolean expressions.
data Bexp
  = Btrue
  | Bfalse
  | Beq Aexp Aexp
  | Bleq Aexp Aexp
  | Bneg Bexp
  | Band Bexp Bexp
  deriving (Show, Eq)

-- | Statements, including try-catch clauses.
data Stm
  = Sass Varname Aexp 
  | Sskip
  | Scomp Stm Stm
  | Sif Bexp Stm Stm
  | Swhile Bexp Stm
  | Stry Stm Stm
  deriving (Show, Eq)