// demjava.cd -- class dictionary for Demeter/Java (@ import java.util.*; import java.io.*; @) Main = . GenerateCopyVisitor = Ident String Ident. GetCSNameVisitor = Ident. GetCDNameVisitor = Ident. GetPNameVisitor = Ident. GetPCNameVisitor = Ident. IsDemeterClassVisitor = . Program = [ Package ] [ JavaCode ] ClassGraph. Package ~ "package" DirName { "." DirName } ";". ClassGraph = DList(ClassDef). ClassDef = ParamClassName ClassParts [ ClassMethods ] "." [ DFS_mark ] [ PP_mark ] . ParamClassName = ClassName ["(" Commalist(ClassName) ")"]. ClassParts : ConstOrAltClass | RepetitionClass. ConstOrAltClass : ConstructionClass | AlternationClass *common* + + + List(PartOrSyntax) ClassParents - - -. PartOrSyntax : Part | OptionalPart | Syntax. Part = [ "<" PartName ">" ] ClassSpec. OptionalPart = "[" Sandwich(Part) "]". ClassParents = [ "*extends*" ClassSpec ] [ "*implements*" Commalist(ClassSpec) ] . ConstructionClass = "=". AlternationClass = ":" + + + Barlist(Subclass) - - - [ Common ]. Subclass = ClassSpec. Common = *l + + + "*" "common" "*" - - -. RepetitionClass = "~" Sandwich(RepeatedPart). RepeatedPart = [ ClassSpec ] "{" Sandwich(ClassSpec) "}". Sandwich(S) = List(Syntax) S List(Syntax) . ClassSpec = ClassName ["(" Commalist(ClassSpec) ")" ] [ PP_mark ] . Syntax : PlainSyntax | PrintCommand. PlainSyntax = String. PrintCommand : PrintIndent | PrintUnindent | PrintSkip | PrintSpace. PrintIndent = "+" . PrintUnindent = "-" . PrintSkip = "*l" . PrintSpace = "*s" . // Marks for traversal bookkeeping. DFS_mark = "*dfs*". PP_mark = "*pp*". ////////////////////// // Behavior (methods). ////////////////////// ProgramBehavior = [ DList(ClassBehavior) ] . ClassBehavior = ClassName ClassMethods. ClassMethods = "{" *l + [ SList(Method) ] - "}" . Method : Traversal | Behavior. Behavior : Wrapper | Verbatim. // Class graph traversal specifications. Traversal = "traversal" TraversalName TraversalArgs "{" *l + PathDirective ";" - *l "}". TraversalArgs = "(" [ Commalist(Visitor) ] ")" . Visitor = ClassName VisitorName. PathDirective = [ BypassingDirective ] [ ThroughDirective ] TargetDirective. BypassingDirective = "bypassing" GlobSpec. ThroughDirective = "through" GlobSpec. TargetDirective : To | ToStop *common* ClassGlobSpec. To = "to". ToStop = "to-stop". GlobSpec : OneGlob | GlobSet. OneGlob = Glob. GlobSet = "{" [ Commalist(Glob) ] "}". Glob : ClassGlob | EdgeGlob. EdgeGlob : PartGlob | SubclassGlob. ClassGlob = ClassNameGlob. PartGlob = "-" ">" ClassNameGlob "," PartNameGlob "," ClassNameGlob. SubclassGlob = "=" ">" ClassNameGlob "," ClassNameGlob. ClassNameGlob : ClassNameExact | AnyClass. ClassNameExact = ClassName. AnyClass = "*". PartNameGlob : PartNameExact | AnyPart. PartNameExact = PartName. AnyPart = "*". ClassGlobSpec : OneClassGlob | ClassGlobSet. OneClassGlob = ClassGlob. ClassGlobSet = "{" Commalist(ClassGlob) "}". // Before and after wrappers. Wrapper : Before | After *common* HostSpec JavaCode. HostSpec : ClassGlobSpec. Before = "before". After = "after". // Verbatim java code. Verbatim = JavaCode. // Terminal buffer classes. DirName = Ident. ClassName = Ident. PartName = Ident. TraversalName = Ident. VisitorName = Ident. MethodName = Ident. JavaCode = "(@" String "@)". // Parameterized class definitions. List(S) ~ {S}. SList(S) ~ S { *l S } *l . DList(S) ~ S { *l *l S } *l . Commalist(S) ~ S {"," S}. Barlist(S) ~ S { *l "|" S}. // Extra utility parameterized classes. Parameterized = Commalist(Part). SyntaxTable = List(PlainSyntax). // Visitors. PrintVisitor = . // // findClassDef visitors // ClassDefFinder =ClassDef ClassName. //--rm from ClassDefFinder: Boolean ClassNameMole = "mole" ClassName. // // setInheritedLinks visitors // ParentalUnit = "pu" ClassName ClassSpec. ParentalCarrier = ParentalUnit. // // Glob visitor // GlobMatchVisitor = "gmv" PartName ClassName ClassName. // Boolean // // Subgraph calculation // GraphDFSVisitor = "gdfsv" BypassingDirective TargetDirective ClassDef. //removed for new version of demjava. (sj/kv) // Markers SubgraphVisitor Boolean. Tracer = . //Digout visitor DigOutVisitor = ClassName. TestTraversal = "from" ClassName Traversal. // $Id: demjava.cd,v 1.2 1996/11/20 20:04:03 shiney Exp $ // // $Log: demjava.cd,v $ // # Revision 1.2 1996/11/20 20:04:03 shiney // # Globs for TargetDirective implementation // # // Revision 1.1 1996/11/19 21:34:20 shiney // Initial revision // // Revision 1.4 1996/11/16 20:07:12 fox // Traversing works for class-bypassing. // // Revision 1.3 1996/11/13 22:14:04 fox // Glob (and hence Bypassing) matching implemented. // // Revision 1.2 1996/11/13 14:24:08 fox // Untabified. // // Revision 1.1 1996/11/13 07:25:42 fox // Initial revision // //