HaRe-0.6: StrategyLib-4.0-beta/examples/joos-padl02/Datatypes.hs
{----------------------------------------------------------------------------
Abstract syntax of JOOS, based on:
David A. Watt. JOOS action semantics. Version 1, available from
http://www.dcs.gla.ac.uk/~daw/publications/JOOS.ps, October 1997.
Modifications:
o StatFocus
o StringLiterals
----------------------------------------------------------------------------}
module Datatypes where
import TermRep
import Monad
data Assignment = Assignment Identifier Expression
deriving (Eq, Show)
data InstanceCreation = InstanceCreation Identifier Arguments
deriving (Eq, Show)
data MethodInvocation = ExpressionInvocation Expression Identifier Arguments
| SuperInvocation Identifier Arguments
deriving (Eq, Show)
data Arguments = Arguments [Expression]
deriving (Eq, Show)
data Expression = Literal Literal
| Identifier Identifier
| This
| PrefixExpr PrefixOperator Expression
| InfixExpr Expression InfixOperator Expression
| AndOrExpr Expression AndOr Expression
| InstanceOf Expression Identifier
| TypeCast Type Expression
| BracketExpr Expression
| AssignmentExpr Assignment
| InstanceCreationExpr InstanceCreation
| MethodInvocationExpr MethodInvocation
deriving (Eq, Show)
data AndOr = AND | OR
deriving (Eq, Show)
data PrefixOperator = Neg | Fac
deriving (Eq, Show)
data InfixOperator = Eq | NEQ | Lt | Gt | LEQ | GEQ
| PLUS | MINUS | MUL | DIV | MOD
deriving (Eq, Show)
data Literal = BooleanLit BooleanLiteral
| IntegerLit IntegerLiteral
| Null
| StringLit StringLiteral
deriving (Eq, Show)
data BooleanLiteral = TRUE | FALSE
deriving (Eq, Show)
type IntegerLiteral = Integer
type StringLiteral = String
type Identifier = String
data BlockStatements = BlockStatements [VariableDeclaration] [Statement]
deriving (Eq, Show)
data Statement = Skip
| Block BlockStatements
| AssignmentStat Assignment
| InstanceCreationStat InstanceCreation
| MethodInvocationStat MethodInvocation
| ReturnStat (Maybe Expression)
| IfStat Expression Statement Statement
| WhileStat Expression Statement
--- Additions
| StatFocus Statement
deriving (Eq, Show)
data ClassDeclaration = ClassDecl FinalOpt Identifier Identifier
[FieldDeclaration]
ConstructorDeclaration
[MethodDeclaration]
deriving (Eq, Show)
type FinalOpt = Bool
data FieldDeclaration = FieldDecl Type Identifier
deriving (Eq, Show)
data ConstructorDeclaration
= ConstructorDecl Identifier FormalParameters
Arguments BlockStatements
deriving (Eq, Show)
data MethodDeclaration = MethodDecl (Maybe Type) Identifier FormalParameters
BlockStatements
deriving (Eq, Show)
data FormalParameters = FormalParams [FormalParameter]
deriving (Eq, Show)
data FormalParameter = FormalParam Type Identifier
deriving (Eq, Show)
data VariableDeclaration
= VariableDecl Type Identifier
deriving (Eq, Show)
data Type = INT | BOOLEAN | Type Identifier
deriving (Eq, Show)