#include "UNKNOWN.h"



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

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

  // assignments for carrying in

  // prefix class wrappers
 cout << endl
                     << "Checking that every class is defined exactly once ..."
                     << endl;
              

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

  // suffix class wrappers

  // assignments for carrying out
}

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

  // assignments for carrying in

  // prefix class wrappers
 if (graph->check_classes1(this->get_source()) > 1)
                  return_val = 0;
              

  // outgoing calls
  // construction edge prefix wrappers
  this->get_ns()->check_classes_( return_val, graph ,  params  );
  // construction edge suffix wrappers

  // suffix class wrappers

  // assignments for carrying out
}

//  Neighbors  : Neighbors_wc   |
//            Repetit_n 
//           *common* .
void Neighbors::check_classes_( int& return_val, Cd_graph*  graph,Vertex_Comma_list*  params )
{
  DEM_TRACE("Neighbors","void Neighbors::check_classes_(int& return_val,Cd_graph*  graph,Vertex_Comma_list*  params)");
#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_classes_( int& return_val, Cd_graph*  graph,Vertex_Comma_list*  params )
{
  DEM_TRACE("Neighbors_wc","void Neighbors_wc::check_classes_(int& return_val,Cd_graph*  graph,Vertex_Comma_list*  params)");
#ifndef NOTRACE
   DemTrace demTraceEmptyMethod(__FILE__,__LINE__,"Neighbors_wc",form(" at %s , ***  PREMATURELY TERMINATED *** ", this->get_type()));
#endif

}

//  Construct_ns  = "=" .
void Construct_ns::check_classes_( int& return_val, Cd_graph*  graph,Vertex_Comma_list*  params )
{
  DEM_TRACE("Construct_ns","void Construct_ns::check_classes_(int& return_val,Cd_graph*  graph,Vertex_Comma_list*  params)");
  // 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_classes_( return_val, graph ,  params  );
  // 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_classes_( int& return_val, Cd_graph*  graph,Vertex_Comma_list*  params )
{
  DEM_TRACE("Alternat_ns","void Alternat_ns::check_classes_(int& return_val,Cd_graph*  graph,Vertex_Comma_list*  params)");
  // variables for carrying in and out

  // assignments for carrying in



  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_alternat_ns()->check_classes_( return_val, graph ,  params  );
  // construction edge suffix wrappers
  // inheritance edge prefix wrappers
  // construction edge prefix wrappers
  this->get_construct_ns()->check_classes_( return_val, graph ,  params  );
  // construction edge suffix wrappers
  // inheritance edge prefix wrappers

  // suffix class wrappers

  // assignments for carrying out


}

//  Repetit_n  = "~" 
//            <sandwiched > Kernel_Sandwich .
void Repetit_n::check_classes_( int& return_val, Cd_graph*  graph,Vertex_Comma_list*  params )
{
  DEM_TRACE("Repetit_n","void Repetit_n::check_classes_(int& return_val,Cd_graph*  graph,Vertex_Comma_list*  params)");
  // variables for carrying in and out

  // assignments for carrying in


  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_sandwiched()->check_classes_( return_val, graph ,  params  );
  // construction edge suffix wrappers

  // suffix class wrappers

  // assignments for carrying out

}

//  Kernel  =  [ <nonempty > Term  ] 
//         "{" 
//         <repeated > Term_Sandwich 
//         "}" .
void Kernel::check_classes_( int& return_val, Cd_graph*  graph,Vertex_Comma_list*  params )
{
  DEM_TRACE("Kernel","void Kernel::check_classes_(int& return_val,Cd_graph*  graph,Vertex_Comma_list*  params)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  if ( this->get_nonempty() != NULL )
  {
  // construction edge prefix wrappers
    this->get_nonempty()->check_classes_( return_val, graph ,  params  );
  // construction edge prefix wrappers
  }
  // construction edge prefix wrappers
  this->get_repeated()->check_classes_( return_val, graph ,  params  );
  // construction edge suffix wrappers

  // suffix class wrappers

  // assignments for carrying out
}

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

}

//  Vertex  = <vertex_name > DemIdent .
void Vertex::check_classes_( int& return_val, Cd_graph*  graph,Vertex_Comma_list*  params )
{
  DEM_TRACE("Vertex","void Vertex::check_classes_(int& return_val,Cd_graph*  graph,Vertex_Comma_list*  params)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers
 if ((strcmp(this->get_vertex_name()->get_val(), 
		            "DemIdent")  != 0) &&
                    (strcmp(this->get_vertex_name()->get_val(), 
		            "DemReal")   != 0) &&
                    (strcmp(this->get_vertex_name()->get_val(), 
		            "DemNumber") != 0) &&
                    (strcmp(this->get_vertex_name()->get_val(), 
		            "DemString") != 0) &&
                    (strcmp(this->get_vertex_name()->get_val(), 
                    "DemText")   != 0)) {

                    if (graph->find_adjacency(this) == NULL) {
                      if ((params == NULL) ||
                          (!params->check_classes2(this))) {
                        return_val = 0;
                        cout << "sem-check: error: undefined class: '";
                        this->g_print();
                        cout << "' on line " 
                             << this->get_vertex_name()->get_line_number() 
                             << endl;
                    }
                  }
                }
              

  // outgoing calls

  // suffix class wrappers

  // assignments for carrying out
}

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

}

//  Regular  = .
void Regular::check_classes_( int& return_val, Cd_graph*  graph,Vertex_Comma_list*  params )
{
  DEM_TRACE("Regular","void Regular::check_classes_(int& return_val,Cd_graph*  graph,Vertex_Comma_list*  params)");
  // 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_vertex()->check_classes_( return_val, graph ,  params  );
  // construction edge suffix wrappers
  // inheritance edge prefix wrappers

  // suffix class wrappers

  // assignments for carrying out


}

//  Labeled  = "<" 
//          <label_name > DemIdent 
//          ">" .
void Labeled::check_classes_( int& return_val, Cd_graph*  graph,Vertex_Comma_list*  params )
{
  DEM_TRACE("Labeled","void Labeled::check_classes_(int& return_val,Cd_graph*  graph,Vertex_Comma_list*  params)");
  // 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_vertex()->check_classes_( return_val, graph ,  params  );
  // construction edge suffix wrappers
  // inheritance edge prefix wrappers

  // suffix class wrappers

  // assignments for carrying out


}

//  Inherit_term  = "*inherit*" 
//               <inherited > Term_Comma_list .
void Inherit_term::check_classes_( int& return_val, Cd_graph*  graph,Vertex_Comma_list*  params )
{
  DEM_TRACE("Inherit_term","void Inherit_term::check_classes_(int& return_val,Cd_graph*  graph,Vertex_Comma_list*  params)");
  // variables for carrying in and out

  // assignments for carrying in


  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_inherited()->check_classes_( return_val, graph ,  params  );
  // construction edge suffix wrappers

  // suffix class wrappers

  // assignments for carrying out

}

//  Term  : Normal   |
//       CppTerm 
//           *common* <vertex > Vertex 
//                    <moduleRef > TermRef 
//                     [ <actual_parameters > Term_Comma_list  ] .
void Term::check_classes_( int& return_val, Cd_graph*  graph,Vertex_Comma_list*  params )
{
  DEM_TRACE("Term","void Term::check_classes_(int& return_val,Cd_graph*  graph,Vertex_Comma_list*  params)");
#ifndef NOTRACE
   DemTrace demTraceEmptyMethod(__FILE__,__LINE__,"Term",form(" at %s , ***  PREMATURELY TERMINATED *** ", this->get_type()));
#endif

}

//  CppTerm  = "$" .
void CppTerm::check_classes_( int& return_val, Cd_graph*  graph,Vertex_Comma_list*  params )
{
  DEM_TRACE("CppTerm","void CppTerm::check_classes_(int& return_val,Cd_graph*  graph,Vertex_Comma_list*  params)");
  // 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_vertex()->check_classes_( return_val, graph ,  params  );
  // construction edge suffix wrappers
  if ( this->get_actual_parameters() != NULL )
  {
  // construction edge prefix wrappers
    this->get_actual_parameters()->check_classes_( return_val, graph ,  params  );
  // construction edge prefix wrappers
  }
  // inheritance edge prefix wrappers

  // suffix class wrappers

  // assignments for carrying out

}

//  Normal  = .
void Normal::check_classes_( int& return_val, Cd_graph*  graph,Vertex_Comma_list*  params )
{
  DEM_TRACE("Normal","void Normal::check_classes_(int& return_val,Cd_graph*  graph,Vertex_Comma_list*  params)");
  // 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_vertex()->check_classes_( return_val, graph ,  params  );
  // construction edge suffix wrappers
  if ( this->get_actual_parameters() != NULL )
  {
  // construction edge prefix wrappers
    this->get_actual_parameters()->check_classes_( return_val, graph ,  params  );
  // construction edge prefix wrappers
  }
  // inheritance edge prefix wrappers

  // suffix class wrappers

  // assignments for carrying out

}

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

  // assignments for carrying in


  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_opt()->check_classes_( return_val, graph ,  params  );
  // construction edge suffix wrappers

  // suffix class wrappers

  // assignments for carrying out

}

//  Adjacency_Nlist  ~ Adjacency  { Adjacency  }. .
void Adjacency_Nlist::check_classes_( int& return_val, Cd_graph*  graph )
{
  DEM_TRACE("Adjacency_Nlist","void Adjacency_Nlist::check_classes_(int& return_val,Cd_graph*  graph)");
  // 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_classes_( return_val, graph  );
  // repetition edge suffix wrappers
  }

  // suffix class wrappers

  // assignments for carrying out
}

//  Any_vertex_List  ~  { Any_vertex  }. .
void Any_vertex_List::check_classes_( int& return_val, Cd_graph*  graph,Vertex_Comma_list*  params )
{
  DEM_TRACE("Any_vertex_List","void Any_vertex_List::check_classes_(int& return_val,Cd_graph*  graph,Vertex_Comma_list*  params)");
  // 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_classes_( return_val, graph ,  params  );
  // repetition edge suffix wrappers
  }

  // suffix class wrappers

  // assignments for carrying out
}

//  Term_Bar_list  ~ Term  { Term  }. .
void Term_Bar_list::check_classes_( int& return_val, Cd_graph*  graph,Vertex_Comma_list*  params )
{
  DEM_TRACE("Term_Bar_list","void Term_Bar_list::check_classes_(int& return_val,Cd_graph*  graph,Vertex_Comma_list*  params)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  Term_list_iterator	next_Term(*this);
  Term*		each_Term;

  while ( each_Term = next_Term() )
  {
  // repetition edge prefix wrappers
    each_Term->check_classes_( return_val, graph ,  params  );
  // repetition edge suffix wrappers
  }

  // suffix class wrappers

  // assignments for carrying out
}

//  Kernel_Sandwich  = <first > Syntax_vertex_List 
//                  <inner > Kernel 
//                  <second > Syntax_vertex_List .
void Kernel_Sandwich::check_classes_( int& return_val, Cd_graph*  graph,Vertex_Comma_list*  params )
{
  DEM_TRACE("Kernel_Sandwich","void Kernel_Sandwich::check_classes_(int& return_val,Cd_graph*  graph,Vertex_Comma_list*  params)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_inner()->check_classes_( return_val, graph ,  params  );
  // construction edge suffix wrappers

  // suffix class wrappers

  // assignments for carrying out
}

//  Term_Sandwich  = <first > Syntax_vertex_List 
//                <inner > Term 
//                <second > Syntax_vertex_List .
void Term_Sandwich::check_classes_( int& return_val, Cd_graph*  graph,Vertex_Comma_list*  params )
{
  DEM_TRACE("Term_Sandwich","void Term_Sandwich::check_classes_(int& return_val,Cd_graph*  graph,Vertex_Comma_list*  params)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_inner()->check_classes_( return_val, graph ,  params  );
  // construction edge suffix wrappers

  // suffix class wrappers

  // assignments for carrying out
}

//  Term_Comma_list  ~ Term  { Term  }. .
void Term_Comma_list::check_classes_( int& return_val, Cd_graph*  graph,Vertex_Comma_list*  params )
{
  DEM_TRACE("Term_Comma_list","void Term_Comma_list::check_classes_(int& return_val,Cd_graph*  graph,Vertex_Comma_list*  params)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  Term_list_iterator	next_Term(*this);
  Term*		each_Term;

  while ( each_Term = next_Term() )
  {
  // repetition edge prefix wrappers
    each_Term->check_classes_( return_val, graph ,  params  );
  // 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_classes_( int& return_val, Cd_graph*  graph,Vertex_Comma_list*  params )
{
  DEM_TRACE("Opt_labeled_term_Sandwich","void Opt_labeled_term_Sandwich::check_classes_(int& return_val,Cd_graph*  graph,Vertex_Comma_list*  params)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_inner()->check_classes_( return_val, graph ,  params  );
  // construction edge suffix wrappers

  // suffix class wrappers

  // assignments for carrying out
}

int Cd_graph::check_classes1( Vertex*  v )
{
  DEM_TRACE("Cd_graph","int Cd_graph::check_classes1(Vertex*  v)");
  int return_val =  0 ;

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

  // assignments for carrying in

  // prefix class wrappers

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

  // suffix class wrappers

  // assignments for carrying out
}

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

  // assignments for carrying in

  // prefix class wrappers

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

  // suffix class wrappers

  // assignments for carrying out
}

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

  // assignments for carrying in

  // prefix class wrappers
 if(this->g_equal(v)) {
                  return_val++;
                  if ((return_val > 1) && 
                      (this->get_vertex_name()->get_line_number() > 
                       v->get_vertex_name()->get_line_number())) {
                    cout << "sem-check: error: class '";
                    v->g_print();
                    cout << "' on line " 
                         << this->get_vertex_name()->get_line_number()
                         << " is redefined." << endl;
                  }
                }
              

  // outgoing calls

  // suffix class wrappers

  // assignments for carrying out
}

//  Adjacency_Nlist  ~ Adjacency  { Adjacency  }. .
void Adjacency_Nlist::check_classes1_( int& return_val, Vertex*  v )
{
  DEM_TRACE("Adjacency_Nlist","void Adjacency_Nlist::check_classes1_(int& return_val,Vertex*  v)");
  // 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_classes1_( return_val, v  );
  // repetition edge suffix wrappers
  }

  // suffix class wrappers

  // assignments for carrying out
}

int Vertex_Comma_list::check_classes2( Vertex*  v )
{
  DEM_TRACE("Vertex_Comma_list","int Vertex_Comma_list::check_classes2(Vertex*  v)");
  int return_val =  0 ;

  this->check_classes2_( return_val, v  );
  return return_val;
}
//  Vertex  = <vertex_name > DemIdent .
void Vertex::check_classes2_( int& return_val, Vertex*  v )
{
  DEM_TRACE("Vertex","void Vertex::check_classes2_(int& return_val,Vertex*  v)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers
 if (this->g_equal(v)) return_val = 1;
              

  // outgoing calls

  // suffix class wrappers

  // assignments for carrying out
}

//  Vertex_Comma_list  ~ Vertex  { Vertex  }. .
void Vertex_Comma_list::check_classes2_( int& return_val, Vertex*  v )
{
  DEM_TRACE("Vertex_Comma_list","void Vertex_Comma_list::check_classes2_(int& return_val,Vertex*  v)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  Vertex_list_iterator	next_Vertex(*this);
  Vertex*		each_Vertex;

  while ( each_Vertex = next_Vertex() )
  {
  // repetition edge prefix wrappers
    each_Vertex->check_classes2_( return_val, v  );
  // repetition edge suffix wrappers
  }

  // suffix class wrappers

  // assignments for carrying out
}


