Question 2: =========== Class dictionary design Consider the following input and the corresponding cd. Find the UNKNOWNs. module di TreeICG(ElementICG e) { Tree : Leaf | Branch . Leaf = Data @ e. Branch = Data @ e ListOfTree. ListOfTree : Empty | NonEmpty. Empty = . NonEmpty = Tree ListOfTree. } aspect TreeWalker { declare strategy declare traversal declare constraints } // visitor classes end module di ElementICG { Data = Name_ValuePair_List. NameValuePair = Name Value. Name = . Value = . Name_ValuePair_List : Empty | NonEmpty. Empty = . NonEmpty = NameValuePair Name_ValuePair_List. } aspect ElementWalker { declare constraints declare strategy declare traversal } // visitor classes end module di Decide { F = Constraints. Constraints : E | N. E = . N = Constraint Constraints. Constraint = RelNumber Variable Variable. RelNumber = int. Variable = . } aspect Chooser { declare strategy declare constraints declare traversal } end cd XMLSubset implements TreeICG(ElementICG) { XMLDef = A B. A : X | Y common U V. map treeMap = for TreeICG { use Tree as XMLDef use Leaf as EmptyTag } map elementMap = for ElementICG { use Data as OpenTag use Data as OpenCloseTag } } Here comes the cd: ================================================== Input = List(Module) ConcreteCd EOF. Module = "module" UNKNOWN List(UNKNOWN) // list of visitor classes "UNKNOWN". DI = "di" DIName [UNKNOWN] "{" UNKNOWN "}". ParameterDI = "(" DIName DIVariable ")". Aspect = "aspect" AspectName UNKNOWN. Declaration UNKNOWN. Strategy UNKNOWN. Traversal UNKNOWN. Constraints UNKNOWN. ConcreteCd = "cd" CDName "implements" DIName [ActualDI] "{" UNKNOWN "}". ActualDI = "(" DIName ")". Map = "map" MapName "=" "for" DIName UNKNOWN(Basic). Basic = "use" Cd_Vertex "as" Cd_Vertex. Cd_Graph = UNKNOWN. // this is a big UNKNOWN Cd_Vertex = < vertex_name > Cd_ClassName ["@" DIName] . DIName = Ident. DIVariable = Ident. AspectName = Ident. CDName = Ident. MapName = Ident. List(S) ~ {S}. CList(S) ~ "{" {S} "}". Main = String.