#include "UNKNOWN.h"



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

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

  // assignments for carrying in

  // prefix class wrappers
 cout << endl << "Checking that all alternatives are defined "
                     << "as either" << endl
                     << "\tconstruction classes or alternation classes that"
                     << endl << "\twill eventually be defined by "
                     << "construction classes ..." << endl;
              

  // outgoing calls
  // construction edge prefix wrappers
  this->get_adjacencies()->check_alternatives_( 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_alternatives_( int& return_val, Cd_graph*  graph )
{
  DEM_TRACE("Adjacency","void Adjacency::check_alternatives_(int& return_val,Cd_graph*  graph)");
  // variables for carrying in and out
  Vertex*  src =  this->get_source() ;

  // assignments for carrying in

  // prefix class wrappers

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

  // suffix class wrappers

  // assignments for carrying out
}

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

}

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

  // assignments for carrying in



  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_alternat_ns()->check_alternatives_( return_val, src ,  graph  );
  // 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_alternatives_( int& return_val, Vertex*  src,Term_Bar_list*  tbl,Cd_graph*  graph )
{
  DEM_TRACE("Term","void Term::check_alternatives_(int& return_val,Vertex*  src,Term_Bar_list*  tbl,Cd_graph*  graph)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers
 Adjacency* adjclass = graph->find_adjacency(this->get_vertex());
                if (adjclass->check_alternatives1()) {
                  cout << "sem-check: error: on line "
                       << this->find_line_number()
                       << "  ";
                  this->get_vertex()->g_print();
                  cout << ", a repetition class," << endl
                       << "\tcannot be an alternative of ";
                  src->g_print();
                  cout << "." << endl; 
                  return_val = 0;
                }

                if (adjclass->check_alternatives2(graph, src, tbl)) {
                  return_val = 0;
                }
              


  // suffix class wrappers

  // assignments for carrying out
}

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

  // suffix class wrappers

  // assignments for carrying out
}

//  Term_Bar_list  ~ Term  { Term  }. .
void Term_Bar_list::check_alternatives_( int& return_val, Vertex*  src,Cd_graph*  graph )
{
  DEM_TRACE("Term_Bar_list","void Term_Bar_list::check_alternatives_(int& return_val,Vertex*  src,Cd_graph*  graph)");
  // variables for carrying in and out
  Term_Bar_list*  tbl =  this ;

  // 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_alternatives_( return_val, src ,  tbl ,  graph  );
  // repetition edge suffix wrappers
  }

  // suffix class wrappers

  // assignments for carrying out
}

int Adjacency::check_alternatives1(  )
{
  DEM_TRACE("Adjacency","int Adjacency::check_alternatives1()");
  int return_val =  0 ;

  this->check_alternatives1_( return_val );
  return return_val;
}
//  Adjacency  = <source > Vertex 
//             [ <parameters > Vertex_Comma_list  ] 
//            <ns > Neighbors 
//            "." 
//            *l.
void Adjacency::check_alternatives1_( int& return_val )
{
  DEM_TRACE("Adjacency","void Adjacency::check_alternatives1_(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_alternatives1_( return_val );
  // construction edge suffix wrappers

  // suffix class wrappers

  // assignments for carrying out
}

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

}

//  Repetit_n  = "~" 
//            <sandwiched > Kernel_Sandwich .
void Repetit_n::check_alternatives1_( int& return_val )
{
  DEM_TRACE("Repetit_n","void Repetit_n::check_alternatives1_(int& return_val)");
  // variables for carrying in and out

  // assignments for carrying in


  // prefix class wrappers
 return_val = 1; 

  // outgoing calls

  // suffix class wrappers

  // assignments for carrying out

}

int Adjacency::check_alternatives2( Cd_graph*  graph,Vertex*  src,Term_Bar_list*  tbl )
{
  DEM_TRACE("Adjacency","int Adjacency::check_alternatives2(Cd_graph*  graph,Vertex*  src,Term_Bar_list*  tbl)");
  int return_val =  0 ;

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

  // assignments for carrying in

  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_ns()->check_alternatives2_( return_val, graph ,  src ,  tbl  );
  // construction edge suffix wrappers

  // suffix class wrappers

  // assignments for carrying out
}

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

}

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

  // assignments for carrying in



  // prefix class wrappers

  // outgoing calls
  // construction edge prefix wrappers
  this->get_alternat_ns()->check_alternatives2_( return_val, graph ,  src ,  tbl  );
  // 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_alternatives2_( int& return_val, Cd_graph*  graph,Vertex*  src,Term_Bar_list*  tbl )
{
  DEM_TRACE("Term","void Term::check_alternatives2_(int& return_val,Cd_graph*  graph,Vertex*  src,Term_Bar_list*  tbl)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers
 if (tbl->check_alternatives3(src, this->get_vertex()))
                  return_val = 1;
                else 
                  if (graph->find_adjacency(this->get_vertex())
                           ->check_alternatives2(graph, src, tbl))
                    return_val = 1;
              


  // suffix class wrappers

  // assignments for carrying out
}

//  Term_Bar_list  ~ Term  { Term  }. .
void Term_Bar_list::check_alternatives2_( int& return_val, Cd_graph*  graph,Vertex*  src,Term_Bar_list*  tbl )
{
  DEM_TRACE("Term_Bar_list","void Term_Bar_list::check_alternatives2_(int& return_val,Cd_graph*  graph,Vertex*  src,Term_Bar_list*  tbl)");
  // 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_alternatives2_( return_val, graph ,  src ,  tbl  );
  // repetition edge suffix wrappers
  }

  // suffix class wrappers

  // assignments for carrying out
}

int Term_Bar_list::check_alternatives3( Vertex*  src,Vertex*  v )
{
  DEM_TRACE("Term_Bar_list","int Term_Bar_list::check_alternatives3(Vertex*  src,Vertex*  v)");
  int return_val =  0 ;

  this->check_alternatives3_( return_val, src ,  v  );
  return return_val;
}
//  Term  : Normal   |
//       CppTerm 
//           *common* <vertex > Vertex 
//                    <moduleRef > TermRef 
//                     [ <actual_parameters > Term_Comma_list  ] .
void Term::check_alternatives3_( int& return_val, Vertex*  src,Vertex*  v )
{
  DEM_TRACE("Term","void Term::check_alternatives3_(int& return_val,Vertex*  src,Vertex*  v)");
  // variables for carrying in and out

  // assignments for carrying in

  // prefix class wrappers
 if (this->get_vertex()->g_equal(v)) {
                  cout << "sem-check: error: on line "
                       << this->find_line_number()
                       << "  ";
                  this->get_vertex()->g_print();
                  cout << "is duplicated as an alternative of ";
                  src->g_print();
                  cout << "." << endl;
                  return_val = 1;
                }
              


  // suffix class wrappers

  // assignments for carrying out
}

//  Term_Bar_list  ~ Term  { Term  }. .
void Term_Bar_list::check_alternatives3_( int& return_val, Vertex*  src,Vertex*  v )
{
  DEM_TRACE("Term_Bar_list","void Term_Bar_list::check_alternatives3_(int& return_val,Vertex*  src,Vertex*  v)");
  // 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_alternatives3_( return_val, src ,  v  );
  // repetition edge suffix wrappers
  }

  // suffix class wrappers

  // assignments for carrying out
}


