87 lines
1.2 KiB
Haskell
87 lines
1.2 KiB
Haskell
module AbsJavalette where
|
|
|
|
-- Haskell module generated by the BNF converter
|
|
|
|
newtype Ident = Ident String deriving (Eq,Ord,Show)
|
|
data Program =
|
|
Program [TopDef]
|
|
deriving (Eq,Ord,Show)
|
|
|
|
data TopDef =
|
|
FnDef Type Ident [Arg] Block
|
|
deriving (Eq,Ord,Show)
|
|
|
|
data Arg =
|
|
Arg Type Ident
|
|
deriving (Eq,Ord,Show)
|
|
|
|
data Block =
|
|
Block [Stmt]
|
|
deriving (Eq,Ord,Show)
|
|
|
|
data Stmt =
|
|
Empty
|
|
| BStmt Block
|
|
| Decl Type [Item]
|
|
| Ass Ident Expr
|
|
| Incr Ident
|
|
| Decr Ident
|
|
| Ret Expr
|
|
| VRet
|
|
| Cond Expr Stmt
|
|
| CondElse Expr Stmt Stmt
|
|
| While Expr Stmt
|
|
| SExp Expr
|
|
deriving (Eq,Ord,Show)
|
|
|
|
data Item =
|
|
NoInit Ident
|
|
| Init Ident Expr
|
|
deriving (Eq,Ord,Show)
|
|
|
|
data Type =
|
|
Int
|
|
| Doub
|
|
| Bool
|
|
| Void
|
|
| Fun Type [Type]
|
|
deriving (Eq,Ord,Show)
|
|
|
|
data Expr =
|
|
EVar Ident
|
|
| ELitInt Integer
|
|
| ELitDoub Double
|
|
| ELitTrue
|
|
| ELitFalse
|
|
| EApp Ident [Expr]
|
|
| EString String
|
|
| Neg Expr
|
|
| Not Expr
|
|
| EMul Expr MulOp Expr
|
|
| EAdd Expr AddOp Expr
|
|
| ERel Expr RelOp Expr
|
|
| EAnd Expr Expr
|
|
| EOr Expr Expr
|
|
| TAnot Type Expr
|
|
deriving (Eq,Ord,Show)
|
|
|
|
data AddOp =
|
|
Plus
|
|
| Minus
|
|
deriving (Eq,Ord,Show)
|
|
|
|
data MulOp =
|
|
Times
|
|
| Div
|
|
| Mod
|
|
deriving (Eq,Ord,Show)
|
|
|
|
data RelOp =
|
|
LTH
|
|
| LE
|
|
| GTH
|
|
| GE
|
|
| EQU
|
|
| NE
|
|
deriving (Eq,Ord,Show)
|
|
|