/*
 File: fsc_file.h
 Date and Time: Fri Jan 30 18:55:11 2015 
*/
#ifndef __fsc_file_h__
#define __fsc_file_h__ 1
#include "yacco2.h"
#include "yacco2_T_enumeration.h"
#include "yacco2_k_symbols.h"
#include "yacco2_err_symbols.h"
#include "yacco2_terminals.h"
#include "yacco2_characters.h"

#include "yacco2_stbl.h"
extern std::vector<NS_yacco2_terminals::table_entry*> GRAMMAR_DICTIONARY;
extern std::vector<NS_yacco2_terminals::table_entry*> T_DICTIONARY;
extern std::map<std::string, std::vector<std::string> > USED_THREADS_LIST;
  
// monolithic grammar: no thread
extern yacco2::State S1_Cfsc_file;
namespace NS_fsc_file {
using namespace NS_yacco2_T_enum;// enumerate
using namespace yacco2;
struct fsm_rules_reuse_table_type{
 fsm_rules_reuse_table_type();
 int no_rules_entries_;
 Per_rule_s_reuse_table* per_rule_s_table_[46];
};
class Cfsc_file: public yacco2::CAbs_fsm {
 public:
  enum rules_and_subrules{
   start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
   ,R_Rfsc_file_ = 569//start_of_rule_list + 0
    ,rhs1_Rfsc_file_ = 1
   ,R_Rtransitive_phrase_ = 570//start_of_rule_list + 2
    ,rhs1_Rtransitive_phrase_ = 2
   ,R_Rtransitive_ = 571//start_of_rule_list + 4
    ,rhs1_Rtransitive_ = 3
    ,rhs2_Rtransitive_ = 4
   ,R_Rtransitive_value_ = 572//start_of_rule_list + 6
    ,rhs1_Rtransitive_value_ = 5
    ,rhs2_Rtransitive_value_ = 6
   ,R_Rgrammar_name_phrase_ = 573//start_of_rule_list + 8
    ,rhs1_Rgrammar_name_phrase_ = 7
   ,R_Rgrammar_name_ = 574//start_of_rule_list + 10
    ,rhs1_Rgrammar_name_ = 8
    ,rhs2_Rgrammar_name_ = 9
   ,R_Rgrammar_name_value_ = 575//start_of_rule_list + 12
    ,rhs1_Rgrammar_name_value_ = 10
    ,rhs2_Rgrammar_name_value_ = 11
   ,R_Rnamespace_phrase_ = 576//start_of_rule_list + 14
    ,rhs1_Rnamespace_phrase_ = 12
   ,R_Rnamespace_ = 577//start_of_rule_list + 16
    ,rhs1_Rnamespace_ = 13
    ,rhs2_Rnamespace_ = 14
   ,R_Rnamespace_value_ = 578//start_of_rule_list + 18
    ,rhs1_Rnamespace_value_ = 15
    ,rhs2_Rnamespace_value_ = 16
   ,R_Rthreadname_phrase_ = 579//start_of_rule_list + 20
    ,rhs1_Rthreadname_phrase_ = 17
   ,R_Rthreadname_ = 580//start_of_rule_list + 22
    ,rhs1_Rthreadname_ = 18
    ,rhs2_Rthreadname_ = 19
   ,R_Rthreadname_value_ = 581//start_of_rule_list + 24
    ,rhs1_Rthreadname_value_ = 20
    ,rhs2_Rthreadname_value_ = 21
   ,R_Rmonolithic_phrase_ = 582//start_of_rule_list + 26
    ,rhs1_Rmonolithic_phrase_ = 22
   ,R_Rmonolithic_ = 583//start_of_rule_list + 28
    ,rhs1_Rmonolithic_ = 23
    ,rhs2_Rmonolithic_ = 24
   ,R_Rmonolithic_value_ = 584//start_of_rule_list + 30
    ,rhs1_Rmonolithic_value_ = 25
    ,rhs2_Rmonolithic_value_ = 26
   ,R_Rfilename_phrase_ = 585//start_of_rule_list + 32
    ,rhs1_Rfilename_phrase_ = 27
   ,R_Rfilename_ = 586//start_of_rule_list + 34
    ,rhs1_Rfilename_ = 28
    ,rhs2_Rfilename_ = 29
   ,R_Rfilename_value_ = 587//start_of_rule_list + 36
    ,rhs1_Rfilename_value_ = 30
    ,rhs2_Rfilename_value_ = 31
   ,R_Rno_of_T_phrase_ = 588//start_of_rule_list + 38
    ,rhs1_Rno_of_T_phrase_ = 32
   ,R_Rno_of_T_ = 589//start_of_rule_list + 40
    ,rhs1_Rno_of_T_ = 33
    ,rhs2_Rno_of_T_ = 34
   ,R_Rno_of_T_value_ = 590//start_of_rule_list + 42
    ,rhs1_Rno_of_T_value_ = 35
    ,rhs2_Rno_of_T_value_ = 36
   ,R_Rlist_of_native_terminals_phrase_ = 591//start_of_rule_list + 44
    ,rhs1_Rlist_of_native_terminals_phrase_ = 37
   ,R_Rlist_of_native_fset_terminals_ = 592//start_of_rule_list + 46
    ,rhs1_Rlist_of_native_fset_terminals_ = 38
    ,rhs2_Rlist_of_native_fset_terminals_ = 39
   ,R_Rno_of_native_fset_terminals_ = 593//start_of_rule_list + 48
    ,rhs1_Rno_of_native_fset_terminals_ = 40
    ,rhs2_Rno_of_native_fset_terminals_ = 41
   ,R_Rfset_terminals_epi_ = 594//start_of_rule_list + 50
    ,rhs1_Rfset_terminals_epi_ = 42
    ,rhs2_Rfset_terminals_epi_ = 43
   ,R_Rfset_terminals_ = 595//start_of_rule_list + 52
    ,rhs1_Rfset_terminals_ = 44
    ,rhs2_Rfset_terminals_ = 45
   ,R_Ra_T_ = 596//start_of_rule_list + 54
    ,rhs1_Ra_T_ = 46
    ,rhs2_Ra_T_ = 47
   ,R_Rend_list_of_native_fset_terminals_ = 597//start_of_rule_list + 56
    ,rhs1_Rend_list_of_native_fset_terminals_ = 48
    ,rhs2_Rend_list_of_native_fset_terminals_ = 49
   ,R_Rlist_of_transitive_threads_phrase_ = 598//start_of_rule_list + 58
    ,rhs1_Rlist_of_transitive_threads_phrase_ = 50
   ,R_Rlist_of_transitive_threads_ = 599//start_of_rule_list + 60
    ,rhs1_Rlist_of_transitive_threads_ = 51
    ,rhs2_Rlist_of_transitive_threads_ = 52
   ,R_Rno_of_transitive_threads_ = 600//start_of_rule_list + 62
    ,rhs1_Rno_of_transitive_threads_ = 53
    ,rhs2_Rno_of_transitive_threads_ = 54
   ,R_Rtransitive_threads_epi_ = 601//start_of_rule_list + 64
    ,rhs1_Rtransitive_threads_epi_ = 55
    ,rhs2_Rtransitive_threads_epi_ = 56
   ,R_Rtransitive_threads_ = 602//start_of_rule_list + 66
    ,rhs1_Rtransitive_threads_ = 57
    ,rhs2_Rtransitive_threads_ = 58
   ,R_Ra_th_ = 603//start_of_rule_list + 68
    ,rhs1_Ra_th_ = 59
    ,rhs2_Ra_th_ = 60
   ,R_Rend_list_of_transitive_threads_ = 604//start_of_rule_list + 70
    ,rhs1_Rend_list_of_transitive_threads_ = 61
    ,rhs2_Rend_list_of_transitive_threads_ = 62
   ,R_Rlist_of_used_threads_phrase_ = 605//start_of_rule_list + 72
    ,rhs1_Rlist_of_used_threads_phrase_ = 63
   ,R_Rlist_of_used_threads_ = 606//start_of_rule_list + 74
    ,rhs1_Rlist_of_used_threads_ = 64
    ,rhs2_Rlist_of_used_threads_ = 65
   ,R_Rno_of_used_threads_ = 607//start_of_rule_list + 76
    ,rhs1_Rno_of_used_threads_ = 66
    ,rhs2_Rno_of_used_threads_ = 67
   ,R_Rused_threads_epi_ = 608//start_of_rule_list + 78
    ,rhs1_Rused_threads_epi_ = 68
    ,rhs2_Rused_threads_epi_ = 69
   ,R_Rused_threads_ = 609//start_of_rule_list + 80
    ,rhs1_Rused_threads_ = 70
    ,rhs2_Rused_threads_ = 71
   ,R_Rb_th_ = 610//start_of_rule_list + 82
    ,rhs1_Rb_th_ = 72
    ,rhs2_Rb_th_ = 73
   ,R_Rend_list_of_used_threads_ = 611//start_of_rule_list + 84
    ,rhs1_Rend_list_of_used_threads_ = 74
    ,rhs2_Rend_list_of_used_threads_ = 75
   ,R_Rfsm_comments_phrase_ = 612//start_of_rule_list + 86
    ,rhs1_Rfsm_comments_phrase_ = 76
   ,R_Rfsm_comments_ = 613//start_of_rule_list + 88
    ,rhs1_Rfsm_comments_ = 77
   ,R_Rfsm_comments_value_ = 614//start_of_rule_list + 90
    ,rhs1_Rfsm_comments_value_ = 78
  };
  //no of la sets = 22
  //no of states = 104
  Cfsc_file();
  ~Cfsc_file();
  void op();
  bool failed();
  void reduce_rhs_of_rule
      (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
  fsm_rules_reuse_table_type fsm_rules_reuse_table;
  static int rhs_to_rules_mapping_[79];
  
    public:
    std::string fully_qualified_th_name_;
    char transitive_;
    char monolithic_;
    NS_yacco2_terminals::T_c_string* grammar_file_name_;
    NS_yacco2_terminals::T_c_string* name_space_name_;
    NS_yacco2_terminals::T_c_string* thread_name_;
    NS_yacco2_terminals::T_c_string* file_name_;
    NS_yacco2_terminals::T_c_string* fsm_comments_;
    NS_yacco2_terminals::T_int_no* no_of_T_;
    std::vector<int> list_of_Ts_;
    NS_yacco2_terminals::T_int_no* no_native_T_;
    std::vector<NS_yacco2_terminals::thread_attributes*> list_of_transitive_threads_;
    std::vector<NS_yacco2_terminals::thread_attributes*> list_of_used_threads_;
    NS_yacco2_terminals::T_int_no* no_threads_;
    NS_yacco2_terminals::T_int_no* used_no_threads_;
    std::vector<std::string>* used_threads_;
  
 };
struct Rfsc_file;
struct Rtransitive_phrase;
struct Rtransitive;
struct Rtransitive_value;
struct Rgrammar_name_phrase;
struct Rgrammar_name;
struct Rgrammar_name_value;
struct Rnamespace_phrase;
struct Rnamespace;
struct Rnamespace_value;
struct Rthreadname_phrase;
struct Rthreadname;
struct Rthreadname_value;
struct Rmonolithic_phrase;
struct Rmonolithic;
struct Rmonolithic_value;
struct Rfilename_phrase;
struct Rfilename;
struct Rfilename_value;
struct Rno_of_T_phrase;
struct Rno_of_T;
struct Rno_of_T_value;
struct Rlist_of_native_terminals_phrase;
struct Rlist_of_native_fset_terminals;
struct Rno_of_native_fset_terminals;
struct Rfset_terminals_epi;
struct Rfset_terminals;
struct Ra_T;
struct Rend_list_of_native_fset_terminals;
struct Rlist_of_transitive_threads_phrase;
struct Rlist_of_transitive_threads;
struct Rno_of_transitive_threads;
struct Rtransitive_threads_epi;
struct Rtransitive_threads;
struct Ra_th;
struct Rend_list_of_transitive_threads;
struct Rlist_of_used_threads_phrase;
struct Rlist_of_used_threads;
struct Rno_of_used_threads;
struct Rused_threads_epi;
struct Rused_threads;
struct Rb_th;
struct Rend_list_of_used_threads;
struct Rfsm_comments_phrase;
struct Rfsm_comments;
struct Rfsm_comments_value;
struct Rfsc_file:public yacco2::CAbs_lr1_sym {
  Rfsc_file(yacco2::Parser* P);
  void op();
  public:
};

struct Rtransitive_phrase:public yacco2::CAbs_lr1_sym {
  Rtransitive_phrase(yacco2::Parser* P);
  public:
};

struct Rtransitive:public yacco2::CAbs_lr1_sym {
  Rtransitive(yacco2::Parser* P);
  public:
  void sr2();
};

struct Rtransitive_value:public yacco2::CAbs_lr1_sym {
  Rtransitive_value(yacco2::Parser* P);
  public:
  void sr1();
  void sr2();
};

struct Rgrammar_name_phrase:public yacco2::CAbs_lr1_sym {
  Rgrammar_name_phrase(yacco2::Parser* P);
  public:
};

struct Rgrammar_name:public yacco2::CAbs_lr1_sym {
  Rgrammar_name(yacco2::Parser* P);
  public:
  void sr2();
};

struct Rgrammar_name_value:public yacco2::CAbs_lr1_sym {
  Rgrammar_name_value(yacco2::Parser* P);
  public:
  void sr1();
  void sr2();
};

struct Rnamespace_phrase:public yacco2::CAbs_lr1_sym {
  Rnamespace_phrase(yacco2::Parser* P);
  public:
};

struct Rnamespace:public yacco2::CAbs_lr1_sym {
  Rnamespace(yacco2::Parser* P);
  public:
  void sr2();
};

struct Rnamespace_value:public yacco2::CAbs_lr1_sym {
  Rnamespace_value(yacco2::Parser* P);
  public:
  void sr1();
  void sr2();
};

struct Rthreadname_phrase:public yacco2::CAbs_lr1_sym {
  Rthreadname_phrase(yacco2::Parser* P);
  public:
};

struct Rthreadname:public yacco2::CAbs_lr1_sym {
  Rthreadname(yacco2::Parser* P);
  public:
  void sr2();
};

struct Rthreadname_value:public yacco2::CAbs_lr1_sym {
  Rthreadname_value(yacco2::Parser* P);
  public:
  void sr1();
  void sr2();
};

struct Rmonolithic_phrase:public yacco2::CAbs_lr1_sym {
  Rmonolithic_phrase(yacco2::Parser* P);
  public:
};

struct Rmonolithic:public yacco2::CAbs_lr1_sym {
  Rmonolithic(yacco2::Parser* P);
  public:
  void sr2();
};

struct Rmonolithic_value:public yacco2::CAbs_lr1_sym {
  Rmonolithic_value(yacco2::Parser* P);
  public:
  void sr1();
  void sr2();
};

struct Rfilename_phrase:public yacco2::CAbs_lr1_sym {
  Rfilename_phrase(yacco2::Parser* P);
  public:
};

struct Rfilename:public yacco2::CAbs_lr1_sym {
  Rfilename(yacco2::Parser* P);
  public:
  void sr2();
};

struct Rfilename_value:public yacco2::CAbs_lr1_sym {
  Rfilename_value(yacco2::Parser* P);
  public:
  void sr1();
  void sr2();
};

struct Rno_of_T_phrase:public yacco2::CAbs_lr1_sym {
  Rno_of_T_phrase(yacco2::Parser* P);
  public:
};

struct Rno_of_T:public yacco2::CAbs_lr1_sym {
  Rno_of_T(yacco2::Parser* P);
  public:
  void sr2();
};

struct Rno_of_T_value:public yacco2::CAbs_lr1_sym {
  Rno_of_T_value(yacco2::Parser* P);
  public:
  void sr1();
  void sr2();
};

struct Rlist_of_native_terminals_phrase:public yacco2::CAbs_lr1_sym {
  Rlist_of_native_terminals_phrase(yacco2::Parser* P);
  public:
};

struct Rlist_of_native_fset_terminals:public yacco2::CAbs_lr1_sym {
  Rlist_of_native_fset_terminals(yacco2::Parser* P);
  public:
  void sr2();
};

struct Rno_of_native_fset_terminals:public yacco2::CAbs_lr1_sym {
  Rno_of_native_fset_terminals(yacco2::Parser* P);
  public:
  void sr1();
  void sr2();
};

struct Rfset_terminals_epi:public yacco2::CAbs_lr1_sym {
  Rfset_terminals_epi(yacco2::Parser* P);
  public:
};

struct Rfset_terminals:public yacco2::CAbs_lr1_sym {
  Rfset_terminals(yacco2::Parser* P);
  public:
};

struct Ra_T:public yacco2::CAbs_lr1_sym {
  Ra_T(yacco2::Parser* P);
  public:
  void sr1();
  void sr2();
};

struct Rend_list_of_native_fset_terminals:public yacco2::CAbs_lr1_sym {
  Rend_list_of_native_fset_terminals(yacco2::Parser* P);
  public:
  void sr2();
};

struct Rlist_of_transitive_threads_phrase:public yacco2::CAbs_lr1_sym {
  Rlist_of_transitive_threads_phrase(yacco2::Parser* P);
  public:
};

struct Rlist_of_transitive_threads:public yacco2::CAbs_lr1_sym {
  Rlist_of_transitive_threads(yacco2::Parser* P);
  public:
  void sr2();
};

struct Rno_of_transitive_threads:public yacco2::CAbs_lr1_sym {
  Rno_of_transitive_threads(yacco2::Parser* P);
  public:
  void sr1();
  void sr2();
};

struct Rtransitive_threads_epi:public yacco2::CAbs_lr1_sym {
  Rtransitive_threads_epi(yacco2::Parser* P);
  public:
};

struct Rtransitive_threads:public yacco2::CAbs_lr1_sym {
  Rtransitive_threads(yacco2::Parser* P);
  public:
};

struct Ra_th:public yacco2::CAbs_lr1_sym {
  Ra_th(yacco2::Parser* P);
  public:
  void sr1();
  void sr2();
};

struct Rend_list_of_transitive_threads:public yacco2::CAbs_lr1_sym {
  Rend_list_of_transitive_threads(yacco2::Parser* P);
  public:
  void sr2();
};

struct Rlist_of_used_threads_phrase:public yacco2::CAbs_lr1_sym {
  Rlist_of_used_threads_phrase(yacco2::Parser* P);
  public:
};

struct Rlist_of_used_threads:public yacco2::CAbs_lr1_sym {
  Rlist_of_used_threads(yacco2::Parser* P);
  public:
  void sr2();
};

struct Rno_of_used_threads:public yacco2::CAbs_lr1_sym {
  Rno_of_used_threads(yacco2::Parser* P);
  public:
  void sr1();
  void sr2();
};

struct Rused_threads_epi:public yacco2::CAbs_lr1_sym {
  Rused_threads_epi(yacco2::Parser* P);
  public:
};

struct Rused_threads:public yacco2::CAbs_lr1_sym {
  Rused_threads(yacco2::Parser* P);
  public:
};

struct Rb_th:public yacco2::CAbs_lr1_sym {
  Rb_th(yacco2::Parser* P);
  public:
  void sr1();
  void sr2();
};

struct Rend_list_of_used_threads:public yacco2::CAbs_lr1_sym {
  Rend_list_of_used_threads(yacco2::Parser* P);
  public:
  void sr2();
};

struct Rfsm_comments_phrase:public yacco2::CAbs_lr1_sym {
  Rfsm_comments_phrase(yacco2::Parser* P);
  public:
};

struct Rfsm_comments:public yacco2::CAbs_lr1_sym {
  Rfsm_comments(yacco2::Parser* P);
  public:
};

struct Rfsm_comments_value:public yacco2::CAbs_lr1_sym {
  Rfsm_comments_value(yacco2::Parser* P);
  public:
  void sr1();
};

} // end of namespace

#endif