Hi Pengcheng: Johny and Harsha are working on a snapshot project for CSG 260. /home/lieber/.www/courses/csg260/f03/projects/johny-harsha (read the project description) They are using sets of nodes and edges to declare marshable and unmarshalable nodes and edges. The selector language attached is useful for defining sets of nodes and it needs to be extended for defining sets of edges (that are not marshalable). There is also a need for statically executable advice becuase they need to analyze the Java code to find the root sites. Please can you make Johny and Harsha aware of your AspectJ extension for statically executable advice http://www.ccs.neu.edu/research/demeter/sea/ and help them to get a convenient language for defining sets of nodes and edges for marshalability and unmarshability. -- Karl // sg.cd -- class dictionary for strategy graphs // $Id: sg.cd,v 1.12 2003/01/30 02:26:05 dougo Exp $ // modified by Karl Lieberherr // added KJL package edu.neu.ccs.demeter.aplib.sg; import java.util.*; import java.io.*; import edu.neu.ccs.demeter.aplib.*; Main = . // testing stub // added KJL public SelectorLanguage = "strategies" StrategyLanguage "node" "sets" NodeSubsetLanguage. StrategyLanguage = NPList(StrategyDef). StrategyDef = StrategyName "=" StrategyExpression ";". NodeSubsetLanguage = PList(NodeSubsetSpec). NodeSubsetSpec = NodeSubsetName "=" NodeSubsetExpression ";". NodeSubsetExpression : Simple | Compound. Simple : NodeSubsetName | ClassNameSet | GraphNodes | GraphNodeRegExp. Compound = "(" Operator List(NodeSubsetExpression) ")". Operator : Union | Intersection | Complement. Union = "||". Intersection = "&&". Complement = "!". ClassNameSet = BCList(ClassName). GraphNodes = "(nodes" StrategyName ")". GraphNodeRegExp = "(regexp" ClassName WildCard ")". WildCard ="*". BCList(S) ~ "{" S {"," S} "}". PList(S) ~ "(" {S} ")". NPList(S) ~ "(" S {S} ")". // end addition StrategyExpression = Strategy. public Strategy : SimpleStrategy | StrategyCombination | StrategyReference implements StrategyI. public SimpleStrategy : StrategyGraph | PathDirective common [ "with" *s NameMap ]. public StrategyGraph = "{" *l + SList(SGEdge) - *l "}" implements SimpleStrategyI, StrategyGraphI, ConstraintMapI. SGEdge = [ SourceMarker *s ] GlobSpec *s "->" *s [ TargetMarker *s ] GlobSpec [ *s NegativeConstraint ] implements Cloneable. SourceMarker = "source:". TargetMarker = "target:". public PathDirective = SourceDirective [ *s NegativeConstraint ] List(PathSegment) *s TargetDirective. SourceDirective : From common *s ClassGlobSpec. From = "from". PathSegment = PositiveConstraint [ *s NegativeConstraint ]. Constraint : PositiveConstraint | NegativeConstraint common *s GlobSpec. PositiveConstraint : Through | Via. // synonyms Through = "through". Via = "via". NegativeConstraint : Bypassing | OnlyThrough. // antonyms Bypassing = "bypassing". OnlyThrough = "only-through". TargetDirective : To | ToStop common *s ClassGlobSpec. To = "to". ToStop = "to-stop". public StrategyCombination : Join | Merge | Intersect common "(" Strategy "," *s Commalist(Strategy) ")" implements StrategyCombinationI, Cloneable. Join = "join". Merge = "merge". Intersect = "intersect". public StrategyReference = Ident. SymbolicNameMap : NameMap implements SymbolicNameMapI. NameMap = "{" *s [ Commalist(NameBinding) *s ] "}". NameBinding = Name "=" ClassGlobSpec. GlobSpec : OneGlob | GlobSet. OneGlob = Glob. GlobSet = "{" *s [ Commalist(Glob) *s ] "}". Glob : ClassGlob | EdgeGlob. EdgeGlob : PartGlob | SubclassGlob | SuperclassGlob. ClassGlob = ClassNameGlob. PartGlob = "->" *s SourceGlob "," PartNameGlob "," TargetGlob. SubclassGlob = "=>" *s SourceGlob "," TargetGlob. SuperclassGlob = ":>" *s SourceGlob "," TargetGlob. SourceGlob = ClassNameGlob. TargetGlob = ClassNameGlob. ClassNameGlob : ClassNameExact | AnyClass. ClassNameExact = ClassName. AnyClass = "*". PartNameGlob : PartNameExact | AnyPart. PartNameExact = PartName. AnyPart = "*". ClassGlobSpec : OneClassGlob | ClassGlobSet. OneClassGlob = ClassGlob. ClassGlobSet = "{" *s Commalist(ClassGlob) *s "}". ClassName = Name. PartName = Ident. Name ~ Ident { "." Ident }. // added KJL StrategyName = Ident. NodeSubsetName = Ident. // end addition // Parameterized class definitions. List(S) ~ {*s S}. SList(S) ~ S { *l S } . Commalist(S) ~ S {"," *s S}. noparse interface SymbolicNameMapI = extends NameMapI. visitors GlobVisitor : .