-- Haskel data types for the abstract syntax. -- Generated by the BNF converter. {-# LANGUAGE GeneralizedNewtypeDeriving #-} -- | The abstract syntax of language JavaletteLight. module AbsJavaletteLight where import qualified Prelude as T (Double, Integer, String) import qualified Prelude as C (Eq, Ord, Show, Read) import Data.String data Prog = Fun Typ Ident [Stm] -- ^ Prog ::= Typ Ident "(" ")" "{" Stm "}" deriving (C.Eq, C.Ord, C.Show, C.Read) data Stm = SAss Ident Exp -- ^ Stm ::= Ident "=" Exp ";" | SDecl Typ Ident -- ^ Stm ::= Typ Ident ";" | SIncr Ident -- ^ Stm ::= Ident "++" ";" | SWhile Exp [Stm] -- ^ Stm ::= "while" "(" Exp ")" "{" Stm "}" deriving (C.Eq, C.Ord, C.Show, C.Read) data Exp = EDouble T.Double -- ^ Exp ::= Double | EInt T.Integer -- ^ Exp ::= Integer | ELt Exp Exp -- ^ Exp ::= Exp1 "<" Exp1 | EPlus Exp Exp -- ^ Exp ::= Exp1 "+" Exp2 | ETimes Exp Exp -- ^ Exp ::= Exp2 "*" Exp3 | EVar Ident -- ^ Exp ::= Ident | ExpT Typ Exp -- ^ Exp ::= Typ "(" Exp ")" deriving (C.Eq, C.Ord, C.Show, C.Read) data Typ = TDouble -- ^ Typ ::= "double" | TInt -- ^ Typ ::= "int" deriving (C.Eq, C.Ord, C.Show, C.Read) newtype Ident = Ident T.String deriving (C.Eq, C.Ord, C.Show, C.Read, Data.String.IsString)