newtype Ident = Ident String deriving (Eq,Ord,Show)
+data Type =
+ TInt
+ | TBool
+ deriving (Eq,Ord,Show)
+
+data Program =
+ Program [FuncStm]
+ deriving (Eq,Ord,Show)
+
data Stm =
- SDecl Type Ident Exp
- | SExp Exp
+ SExp Exp
| SBlock [Stm]
- | SIf Exp Stm Stm
+ | SDecl Type Ident Exp
+ | SDeclD Type Ident
| SWhile Exp Stm
+ | SIf Exp Stm Stm
| SPrint Exp
+ | SReturn Exp
| SNoop
deriving (Eq,Ord,Show)
data Exp =
- BExp Exp BOp Exp
+ EAss Ident Exp
| EVar Ident
- | EAss Ident Exp
| EInt Integer
- | ENeg Exp
| EBool Bool
+ | ENeg Exp
+ | ENot Exp
| EReadI
| EReadB
- | ExpT Type Exp
- | EDefault
- | OpExp Exp Op Exp
+ | EFunc Ident [Exp]
+ | BiOpExp Exp Op Exp
| EPost Ident Op
deriving (Eq,Ord,Show)
-data Stms =
- Program [Stm]
+data Decl =
+ Decl Type Ident
+ deriving (Eq,Ord,Show)
+
+data Func =
+ Func Type Ident [Decl] [Stm]
+ deriving (Eq,Ord,Show)
+
+data FuncStm =
+ S Stm
+ | F Func
deriving (Eq,Ord,Show)
-data BOp =
+data Op =
Lt
| ELt
| Gt
| EGt
| Eq
| NEq
- deriving (Eq,Ord,Show)
-
-data Op =
- Plus
+ | Plus
| Minus
| Times
| Div
deriving (Eq,Ord,Show)
-data Type =
- TInt
- | TBool
- | NoType
- deriving (Eq,Ord,Show)
-