// demjava.cd -- class dictionary for Demeter/Java j-semcheck2 // Final Phase (@ import java.io.*; import java.util.*; import java.lang.*; @) ClassGraph = DList(ClassDef). ClassDef = ParamClassName ClassParts "." . ParamClassName = ClassName ["(" Commalist(ClassName) ")"]. ClassParts : ConstOrAltClass | RepetitionClass. ConstOrAltClass : ConstructionClass | AlternationClass *common* + + + List(PartOrSyntax) ClassParents - - -. RepetitionClass = "~" Sandwich(RepeatedPart). PartOrSyntax : Part | OptionalPart | Syntax. Part = [ "<" PartName ">" ] ClassSpec. OptionalPart = "[" Sandwich(Part) "]". ClassParents = [ "*extends*" Superclass ] [ "*implements*" Commalist(Interface) ] . Superclass = ClassSpec. Interface = ClassSpec. ConstructionClass = "=". AlternationClass = ":" + + + Barlist(Subclass) - - - [ Common ]. Subclass = ClassSpec. Common = *l + + + "*common*" - - -. RepeatedPart = [ ClassSpec ] "{" Sandwich(ClassSpec) "}". Sandwich(S) = List(Syntax) S List(Syntax) . ClassSpec = ClassName ["(" Commalist(ClassSpec) ")" ]. Syntax = PlainSyntax . PlainSyntax = String. // Terminal buffer classes. ClassName = Ident. PartName = Ident. // 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). // Begin j-sem-check2 NameCollector = ParamContainer. AltCheckVisitor = Boolean Boolean ParamContainer ParamContainer. LeftSide_ClassVisitor = NameContainer. RightSide_ClassVisitor = NameContainer. Node =. ParamContainer = *extends* Vector. NameContainer = *extends* Vector. // Inheritance checking ClassNameRetVisitor = ClassName. ClassNameTranspVisitor = ParamClassName. EdgeVisitor = ClassNameTranspVisitor Vector. // End j-sem-check2 Main = .