(@ import java.util.*; import java.io.*; @) ClassGraph = DList(ClassDef). ClassDef = ParamClassName ClassParts "." . 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*" Superclass ] [ "*implements*" Commalist(Interface) ] . Superclass = ClassSpec. Interface = 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) ")" ] . Syntax : PlainSyntax | PrintCommand . PlainSyntax = String. PrintCommand : PrintIndent | PrintUnindent | PrintSkip | PrintSpace. PrintIndent = "+" . PrintUnindent = "-" . PrintSkip = "*l" . PrintSpace = "*s" . // Terminal buffer classes. DirName = Ident. 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). // Visitors added by j-sem-check group. // //Part 1 & 4 // ClassCollector = ClassContainer ClassContainer Integer. PartCollector = ClassContainer ClassContainer. ParamCollector = ClassContainer. ActualPCollector = ClassContainer. ClassContainer = *extends* Vector. TranspVisitor = *extends* Vector. //Part 2 // SimpleChecker = . DeeperVisitor = ClassName Integer. //Part 3 // CompleteChecker = RightChecker LeftChecker. RightChecker = RightCounter ComplexContainer. LeftChecker = LeftCounter ComplexContainer. ComplexContainer = *extends* Vector. RightCounter = Integer ClassName Integer. LeftCounter = Integer ClassName. //Main Class // Main = .