#include "UNKNOWN.h"


 #define NUM_KEYWORDS 51
   static char* keywords[] = {
     "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", 
     "long", "new", "operator", "private", "protected", "public", 
     "register", "return", "short", "signed", "sizeof", "static", "struct", 
     "switch", "template", "this", "throw", "try", "typedef", "union"
     "unsigned", "virtual", "void", "volatile", "while"};



int Cd_graph::check_keywords(  )
{
  DEM_TRACE("Cd_graph","int Cd_graph::check_keywords()");
  int return_val =  1 ;

  this->check_keywords_( return_val );
  return return_val;
}
//  Cd_graph  = <adjacencies > Adjacency_Nlist 
//            [ <terminal_sets > Vertex_Comma_list  ] .
void Cd_graph::check_keywords_( int& return_val )
{
  DEM_TRACE("Cd_graph","void Cd_graph::check_keywords_(int& return_val)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers
 cout << endl << "Checking whether the class names and label "
                     << "names are" << endl
                     << "\tthe keywords of C++ Demeter ..." << endl;

                if (this->check_keywords1() == 0) return_val = 0;
                
              

  // outgoing calls
  // construction edge prefix wrappers
  this->get_adjacencies()->check_keywords_( return_val );
  // construction edge suffix wrappers

  // suffix class wrappers

  // assignments for carrying out
}

//  Adjacency  = <source > Vertex 
//             [ <parameters > Vertex_Comma_list  ] 
//            <ns > Neighbors 
//            "." 
//            *l.
void Adjacency::check_keywords_( int& return_val )
{
  DEM_TRACE("Adjacency","void Adjacency::check_keywords_(int& return_val)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_source()->check_keywords_( return_val );
  // construction edge suffix wrappers

  // suffix class wrappers

  // assignments for carrying out
}

//  Vertex  = <vertex_name > DemIdent .
void Vertex::check_keywords_( int& return_val )
{
  DEM_TRACE("Vertex","void Vertex::check_keywords_(int& return_val)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers
 char* ident = this->get_vertex_name()->get_val();
                int i;
                for (i = 0; i < NUM_KEYWORDS; i++) {
                  if (strcmp(keywords[i], ident) == 0) {
                    cout << "sem-check: error: on line "
                         << this->get_vertex_name()->get_line_number()
                         << " keyword C++ Demeter '";
                    this->g_print();
                    cout << "' is used" << endl;
                    return_val = 0;
                    break;
                  }
                }
              

  // outgoing calls

  // suffix class wrappers

  // assignments for carrying out
}

//  Adjacency_Nlist  ~ Adjacency  { Adjacency  }. .
void Adjacency_Nlist::check_keywords_( int& return_val )
{
  DEM_TRACE("Adjacency_Nlist","void Adjacency_Nlist::check_keywords_(int& return_val)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  Adjacency_list_iterator	next_Adjacency(*this);
  Adjacency*		each_Adjacency;

  while ( each_Adjacency = next_Adjacency() )
  {
  // repetition edge prefix wrappers
    each_Adjacency->check_keywords_( return_val );
  // repetition edge suffix wrappers
  }

  // suffix class wrappers

  // assignments for carrying out
}

int Cd_graph::check_keywords1(  )
{
  DEM_TRACE("Cd_graph","int Cd_graph::check_keywords1()");
  int return_val =  1 ;

  this->check_keywords1_( return_val );
  return return_val;
}
//  Cd_graph  = <adjacencies > Adjacency_Nlist 
//            [ <terminal_sets > Vertex_Comma_list  ] .
void Cd_graph::check_keywords1_( int& return_val )
{
  DEM_TRACE("Cd_graph","void Cd_graph::check_keywords1_(int& return_val)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_adjacencies()->check_keywords1_( return_val );
  // construction edge suffix wrappers

  // suffix class wrappers

  // assignments for carrying out
}

//  Adjacency  = <source > Vertex 
//             [ <parameters > Vertex_Comma_list  ] 
//            <ns > Neighbors 
//            "." 
//            *l.
void Adjacency::check_keywords1_( int& return_val )
{
  DEM_TRACE("Adjacency","void Adjacency::check_keywords1_(int& return_val)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_ns()->check_keywords1_( return_val );
  // construction edge suffix wrappers

  // suffix class wrappers

  // assignments for carrying out
}

//  Neighbors  : Neighbors_wc   |
//            Repetit_n 
//           *common* .
void Neighbors::check_keywords1_( int& return_val )
{
  DEM_TRACE("Neighbors","void Neighbors::check_keywords1_(int& return_val)");
#ifndef NOTRACE
   DemTrace demTraceEmptyMethod(__FILE__,__LINE__,"Neighbors",form(" at %s , ***  PREMATURELY TERMINATED *** ", this->get_type()));
#endif

}

//  Neighbors_wc  : Construct_ns   |
//               Alternat_ns 
//           *common* +
//                    <construct_ns > Any_vertex_List 
//                    -.
void Neighbors_wc::check_keywords1_( int& return_val )
{
  DEM_TRACE("Neighbors_wc","void Neighbors_wc::check_keywords1_(int& return_val)");
#ifndef NOTRACE
   DemTrace demTraceEmptyMethod(__FILE__,__LINE__,"Neighbors_wc",form(" at %s , ***  PREMATURELY TERMINATED *** ", this->get_type()));
#endif

}

//  Construct_ns  = "=" .
void Construct_ns::check_keywords1_( int& return_val )
{
  DEM_TRACE("Construct_ns","void Construct_ns::check_keywords1_(int& return_val)");
  // variables for carrying in and out

  // assignments for carrying in



  // prefix class wrappers

  // outgoing calls
  // inheritance edge prefix wrappers
  // construction edge prefix wrappers
  this->get_construct_ns()->check_keywords1_( return_val );
  // construction edge suffix wrappers
  // inheritance edge prefix wrappers

  // suffix class wrappers

  // assignments for carrying out


}

//  Alternat_ns  = ":" 
//              +
//              <alternat_ns > Term_Bar_list 
//              -
//               [ <common > Common  ] .
void Alternat_ns::check_keywords1_( int& return_val )
{
  DEM_TRACE("Alternat_ns","void Alternat_ns::check_keywords1_(int& return_val)");
  // variables for carrying in and out

  // assignments for carrying in



  // prefix class wrappers

  // outgoing calls
  // inheritance edge prefix wrappers
  // construction edge prefix wrappers
  this->get_construct_ns()->check_keywords1_( return_val );
  // construction edge suffix wrappers
  // inheritance edge prefix wrappers

  // suffix class wrappers

  // assignments for carrying out


}

//  Any_vertex  : Opt_labeled_term   |
//             Optional_term   |
//             Syntax_vertex   |
//             Inherit_term 
//           *common* .
void Any_vertex::check_keywords1_( int& return_val )
{
  DEM_TRACE("Any_vertex","void Any_vertex::check_keywords1_(int& return_val)");
#ifndef NOTRACE
   DemTrace demTraceEmptyMethod(__FILE__,__LINE__,"Any_vertex",form(" at %s , ***  PREMATURELY TERMINATED *** ", this->get_type()));
#endif

}

//  Opt_labeled_term  : Labeled   |
//                   Regular 
//           *common*  [ <staticspec > StaticSpec  ] 
//                     [ <accessorspec > AccessorSpec  ] 
//                    <vertex > Term .
void Opt_labeled_term::check_keywords1_( int& return_val )
{
  DEM_TRACE("Opt_labeled_term","void Opt_labeled_term::check_keywords1_(int& return_val)");
#ifndef NOTRACE
   DemTrace demTraceEmptyMethod(__FILE__,__LINE__,"Opt_labeled_term",form(" at %s , ***  PREMATURELY TERMINATED *** ", this->get_type()));
#endif

}

//  Labeled  = "<" 
//          <label_name > DemIdent 
//          ">" .
void Labeled::check_keywords1_( int& return_val )
{
  DEM_TRACE("Labeled","void Labeled::check_keywords1_(int& return_val)");
  // variables for carrying in and out

  // assignments for carrying in



  // prefix class wrappers
 char* ident = this->get_label_name()->get_val();
                int i;
                for (i = 0; i < NUM_KEYWORDS; i++) {
                  if (strcmp(keywords[i], ident) == 0) {
                    cout << "sem-check: error: on line "
                         << this->get_label_name()->get_line_number()
                         << " keyword C++ Demeter '";
                    this->get_label_name()->g_print();
                    cout << "' is used" << endl;
                    return_val = 0;
                    break;
                  }
                }
              

  // outgoing calls

  // suffix class wrappers

  // assignments for carrying out


}

//  Optional_term  = "[" 
//                <opt > Opt_labeled_term_Sandwich 
//                "]" .
void Optional_term::check_keywords1_( int& return_val )
{
  DEM_TRACE("Optional_term","void Optional_term::check_keywords1_(int& return_val)");
  // variables for carrying in and out

  // assignments for carrying in


  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_opt()->check_keywords1_( return_val );
  // construction edge suffix wrappers

  // suffix class wrappers

  // assignments for carrying out

}

//  Adjacency_Nlist  ~ Adjacency  { Adjacency  }. .
void Adjacency_Nlist::check_keywords1_( int& return_val )
{
  DEM_TRACE("Adjacency_Nlist","void Adjacency_Nlist::check_keywords1_(int& return_val)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  Adjacency_list_iterator	next_Adjacency(*this);
  Adjacency*		each_Adjacency;

  while ( each_Adjacency = next_Adjacency() )
  {
  // repetition edge prefix wrappers
    each_Adjacency->check_keywords1_( return_val );
  // repetition edge suffix wrappers
  }

  // suffix class wrappers

  // assignments for carrying out
}

//  Any_vertex_List  ~  { Any_vertex  }. .
void Any_vertex_List::check_keywords1_( int& return_val )
{
  DEM_TRACE("Any_vertex_List","void Any_vertex_List::check_keywords1_(int& return_val)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  Any_vertex_list_iterator	next_Any_vertex(*this);
  Any_vertex*		each_Any_vertex;

  while ( each_Any_vertex = next_Any_vertex() )
  {
  // repetition edge prefix wrappers
    each_Any_vertex->check_keywords1_( return_val );
  // repetition edge suffix wrappers
  }

  // suffix class wrappers

  // assignments for carrying out
}

//  Opt_labeled_term_Sandwich  = <first > Syntax_vertex_List 
//                            <inner > Opt_labeled_term 
//                            <second > Syntax_vertex_List .
void Opt_labeled_term_Sandwich::check_keywords1_( int& return_val )
{
  DEM_TRACE("Opt_labeled_term_Sandwich","void Opt_labeled_term_Sandwich::check_keywords1_(int& return_val)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_inner()->check_keywords1_( return_val );
  // construction edge suffix wrappers

  // suffix class wrappers

  // assignments for carrying out
}


