-- @name Clones -- @version 1.0 -- @project members Robert Tairas, Alex Liu -- @date created 2007/04/04 -- @description This metamodel defines the abstract syntax of clone representations, -- which includes clone groups and clone instances. package Clones { -- Every class must extend LocatedElement, directly or indirectly. -- This is a technical constraint added by the current -- version of TCS. abstract class LocatedElement { attribute location : String; attribute commentsBefore[*] ordered : String; attribute commentsAfter[*] ordered : String; } -- @begin Root class Root extends LocatedElement { reference cloneGroup[1-*] ordered container : CloneGroup; reference cloneInstance[*] ordered container : CloneInstance; } -- @end Root -- @begin CloneGroup class CloneGroup extends LocatedElement { attribute cloneName : String; reference parameters[1-*] ordered container : Variable; reference statements[*] ordered container : Statement; } -- @end CloneGroup -- @begin CloneInstance class CloneInstance extends LocatedElement { attribute instanceName : String; reference cloneName : CloneGroup; reference arguments[1-*] ordered container : Variable; reference boxes[*] ordered container : Box; } -- @end CloneInstance -- @begin Statements abstract class Statement extends LocatedElement {} class BoxStat extends Statement { attribute boxName : String; } class AssignStat extends Statement { reference variable container : Variable; reference initExp container : Expression; } class DeclarationStat extends Statement { attribute type : Type; reference variable container : Variable; reference initExp container : Expression; } class FunctionStat extends Statement { attribute modifier : Modifier; attribute returnType : Type; reference name container: Variable; reference parameters[*] ordered container : Parameter; reference statements[*] ordered container : Statement; } class ReturnStat extends Statement { reference variable container : Variable; } class Box extends LocatedElement { attribute boxName : String; reference statements[*] ordered container : Statement; } class Parameter extends LocatedElement { attribute type : Type; reference variable container : Variable; } -- @end Statements -- @begin Variables abstract class Variable extends LocatedElement { attribute varName : String; } class ActualVar extends Variable { } class PlaceHolderVar extends Variable { } -- @end Variables -- @begin Expressions abstract class Expression extends LocatedElement {} class IntegerExp extends Expression { attribute value : Integer; } class VariableExp extends Expression { reference value container : Variable; } abstract class OperatorCallExp extends Expression { attribute opName : String; } class BinaryOperatorCallExp extends OperatorCallExp { reference left container : Expression; reference right container : Expression; } class UnaryOperatorCallExp extends OperatorCallExp { reference operand container : Expression; } -- @end Expressions } package Enum { enumeration Command { literal EXPAND; literal SUGGEST; } enumeration Type { literal INT; } enumeration Modifier { literal PUBLIC; } } package PrimitiveTypes { datatype Boolean; datatype Integer; datatype String; }