import edu.neu.ccs.demeter.dj.*; import java.util.*; // Program is the starting nonterminal of the class dictionary grammar, // as well as the root class of the class dictionary class graph. Cd_graph = GlobalImports < adj1 > AdjList [ VisList] [ < adj2> AdjList ] EOF. AdjList = Nlist(Adjacency) . VisList = VisStart AdjList [VisEnd]. VisStart : VisStart1 | VisStart2 | VisStart3. VisEnd : VisEnd1 | VisEnd2. VisStart1 = "visitor". VisStart2 = "visitors". VisStart3 = "*visitor*". VisEnd1 = "endvisitors". VisEnd2 = "*endvisitors*". GlobalImports = [ SList(Import) *l ] . Import = "import" PackageName [ ImportAllClasses ] ";". ImportAllClasses = ".*". PackageName ~ Ident {"." Ident}. Adjacency = < source > Vertex ["(" < parameters> Comma_list(Vertex) ")"] < ns > Neighbors "." . Neighbors : Neighbors_wc | Repetit_n *common*. Neighbors_wc : Construct_ns | Alternat_ns *common* < construct_ns > List(Any_vertex). Construct_ns = "=". Alternat_ns = ":" < alternat_ns > Bar_list(Term) [ Common]. Common : Common1 | Common2. Common1 = "common". Common2 = "*common*". Repetit_n = "~" Sandwich(Kernel). Kernel = [ Term ] "{" Sandwich(Term) "}". Any_vertex : Opt_labeled_term | Optional_term | Syntax_vertex. Vertex = < vertex_name > Ident. Syntax_vertex : Regular_syntax | Print_command *common*. Print_command : Print_indent | Print_unindent | Print_skip | Print_space *common*. Print_indent = "+" . Print_unindent = "-" . Print_skip = "*l" . Print_space = "*s" . Regular_syntax = < string > String . Opt_labeled_term : Labeled | Regular *common* Term. Regular = . Labeled = "<" < label_name > Ident ">" . Term : Normal *common* Vertex ["@" Module_name] ["(" Comma_list(ParVertex) ")" ] . ParVertex = Vertex. Module_name = Ident. Normal = . Optional_term = "[" Sandwich(Opt_labeled_term) "]". // classes defined by Yi ClassName = Ident. PartName = Ident. ClassType = int. ClassDefList = "{" List(ClassInfo)"}". ClassInfo = ClassName ["parentclass" ClassInfo ] "partlist" ["is" List(PartInfo) ] "sublist" [ "is" List(ClassInfo) ] "parameterlist"[ ClassDefList ]. PartInfo = PartName ClassInfo. // parameterized classes List(S) ~ {S}. Nlist(S) ~ S {S}. Bar_list(S) ~ S {"|" S}. Comma_list(S) ~ S {"," S}. SList(S) ~ S { *l S } . Sandwich(S) = List(Syntax_vertex) S List(Syntax_vertex) . // visitor FindCVisitor = extends Visitor . FindAdjVisitor = extends Visitor. FindCCVisitor = extends Visitor . FindUCVisitor = Ident extends Visitor . FindPartVisitor = ClassInfo extends Visitor . FindParaVisitor = extends Visitor . FindComVisitor = ClassInfo extends Visitor . CheckUPartVisitor = extends Visitor . FindSubVisitor = ClassInfo extends Visitor . FlattingVisitor = extends Visitor . CheckCircleVisitor = extends Visitor . Main = .