module TigerAS where
type VarIdent = String
type TypeIdent = String
data Declaration = TypeDec TypeIdent Type | VarDec VarIdent TypeIdent Expr | FunDec VarIdent [TypedVar] TypeIdent Expr
deriving (Eq, Show)
data TypedVar
= TypedVar VarIdent TypeIdent
deriving (Eq, Show)
data Type
= Var TypeIdent
| Array TypeIdent
| Record [TypedVar]
deriving (Eq, Show)
data Expr
= Sub Expr Expr
| Dot Expr Expr
| Apply VarIdent [Expr]
| Ident TypeIdent
| RecordVal TypeIdent [AssignField]
| ArrayVal TypeIdent Expr Expr
| IntLit Integer
| StringLit String
| While Expr Expr
| For VarIdent Expr Expr Expr
| If Expr Expr Expr
| Let [Declaration] [Expr]
| Assign Expr Expr
| Op String Expr Expr
| UnOp String Expr
| Skip
| Nil
| Break
| Seq [Expr]
deriving (Show, Eq)
data AssignField
= AssignField VarIdent Expr
deriving (Eq, Show)
|