*operation* void check_cpp_keyw(Adjacency* adj,int& result) *traverse* *from* Cd_graph *to-stop* {Vertex, Labeled} *wrapper* Normal *prefix* (@ // if (this->get_module_name()== NULL) this->Term::check_cpp_keyw(adj,result); @) *wrapper* CppTerm *prefix* (@ @) *wrapper* Adjacency *prefix* (@ adj = this; // < source > Vertex source->check_cpp_keyw(adj,result ); // [ < parameters > Vertex_comma_list ] if ( parameters ) parameters->check_cpp_keyw(adj,result ); // < ns > Neighbors ns->check_cpp_keyw(adj,result ); @) *wrapper* Vertex *prefix* (@ search_cpp_keyw(vertex_name,result); @) *wrapper* Labeled *prefix* (@ search_cpp_keyw(label_name,result); @) *C* (@ static int Num_CPPKeyWords = 56; static char *CPPKeyWords[] = { "Construction", "Terminal", "Universal", "asm", "auto", "break", "case", "catch", "char", "class", "const", "continue", "default", "delete", "do", "double", "else", "enum", "extern", "float", "for", "friend", "goto", "if", "inline", "int", "label", "list", "long", "new", "operator", "private", "protected", "public", "register", "repetition", "return", "short", "signed", "sizeof", "static", "struct", "switch", "template", "this", "throw", "try", "type", "typedef", "union", "unsigned", "virtual", "virtual", "void", "volatile", "while", }; void search_cpp_keyw(DemIdent* val, int& result) { //binary search int left = 0; int right = Num_CPPKeyWords-1; int middle; while (left <= right) { middle = (left+right) / 2; int cmp_result = strcmp(CPPKeyWords[middle],val->get_val()); if (cmp_result==0) { result = ERROR_CPP; cerr << toolname << ": error: on line " << val->get_line_number() << " keyword C++ Demeter '" << val->get_val() << "' is used" << endl; return; } else if (cmp_result < 0) left = middle+1; else right = middle-1; } } @)