MiniMix Syntactic domains and their typical elements
I in Ident, { identifiers }OE in ObjExpr, { object expressions }
B in Basic, { basic objects }
ME in Msg, { message expressions }
P in Program, { programs }
AB in Abstr, { abstractions }
AD in AttDec { attribute declarations }
MiniMix Syntax Definition
P -> OE OE -> ME | I | B | "self" | "super" | "object" AB ME -> "send" OE1 I "(" OE2 ")" AB -> "[" AD "]" AD -> "method" I1 "(" I2 ")" OE | "mixin" I1 "(" I2 ")" AB | AD1 ";" AD2
MiniMix Semantic domains
Object = Ident -> Attribute Attribute = Object -> Object Generator = Generator -> Object Wrapper = Object -> Generator Env = Ident -> Object
MiniMix Semantic Functions
_P_ : Program -> Object_B_ : Basic -> Object
_OE_ : ObjExpr -> Env -> Object -> Generator -> Object
_ME_ : Msg -> Env -> Object -> Generator -> Object
_AB_ : Abstr -> Env -> Wrapper
_AD_ : AttDec -> Env -> Object -> Generator -> Object
MiniMix Semantic clauses
_P_[ OE ] = Wrap( _OE_[ OE ] bot bot)_OE_[ ME ] = \e.\p.\g._ME_[ ME ] e p g
_OE_[ I ] = \e.\p.\g.(e I)
_OE_[ B ] = \e.\p.\g._B_[ B ]
_OE_[ self ] = \e.\p.\g.(Wrap g)
_OE_[ super ] = \e.\p.\g.p
_OE_[ object AB ] = \e.\p.\g.(Wrap ( _AB_[ AB ] e bot bot))
_ME_[ send OE1 I ( OE2 ) ] = \e.\p.\s.((_OE_[ OE1 ] e p g) I ) (_OE_[ OE2 ] e p g) _AB_[ [ AD ] ] = \e.(_AD_[AD] e) _AD_[ AD1 ; AD2 ] = \e.\p.\g.(_AD_[ AD1 ] e p g) +r (_AD_[ AD2 ] e p g) _AD_[ method I1 ( I2 ) OE ] = \e.\p.\g.[ I1->\o._OE_[OE] e[I2/o] p g ] _AD_[ mixin I1 ( I2 ) AB ] = \e.\p.\g.[I1->\o.(Wrap(Inherit g (_AB_[ AB ] e[I2/o])))]