/*76:*/ //#line 18 "/usr/local/yacco2/library/tok_can.w" /*565:*/ //#line 24 "/usr/local/yacco2/library/macros.w" /*:565*/ //#line 19 "/usr/local/yacco2/library/tok_can.w" /*26:*/ //#line 404 "/usr/local/yacco2/library/intro.w" #include "yacco2.h" /*:26*/ //#line 20 "/usr/local/yacco2/library/tok_can.w" /*27:*/ //#line 408 "/usr/local/yacco2/library/intro.w" #include "yacco2_characters.h" /*:27*/ //#line 21 "/usr/local/yacco2/library/tok_can.w" /*28:*/ //#line 412 "/usr/local/yacco2/library/intro.w" #include "yacco2_k_symbols.h" /*:28*/ //#line 22 "/usr/local/yacco2/library/tok_can.w" using namespace NS_yacco2_characters; /*23:*/ //#line 392 "/usr/local/yacco2/library/intro.w" using namespace yacco2; /*:23*/ //#line 24 "/usr/local/yacco2/library/tok_can.w" /*77:*/ //#line 28 "/usr/local/yacco2/library/tok_can.w" /*:77*//*84:*/ //#line 483 "/usr/local/yacco2/library/tok_can.w" yacco2::tok_can ::tok_can() :tok_base(1) ,pos_(0) ,have_1st_rec__(false) ,file_no__(MAX_USINT) ,line_no__(START_LINE_NO) ,pos_in_line__(START_CHAR_POS) ,string__(std::string()) ,eof_sym_(0) ,real_start_pos_in_line_(START_CHAR_POS) ,eof_pos_(0) ,gps__(0) {} yacco2::tok_can ::tok_can(const char*String,CAbs_lr1_sym*GPS) :tok_base(1) ,pos_(0) ,have_1st_rec__(false) ,file_no__(MAX_USINT) ,line_no__(START_LINE_NO) ,pos_in_line__(START_CHAR_POS) ,string__(String) ,eof_sym_(0) ,real_start_pos_in_line_(START_CHAR_POS) ,eof_pos_(0) ,gps__(GPS) { if(GPS==0)return; line_no__= GPS->tok_co_ords__.line_no__; pos_in_line__= GPS->tok_co_ords__.pos_in_line__; file_no__= GPS->tok_co_ords__.external_file_id__; real_start_pos_in_line_= pos_in_line__; } void yacco2::tok_can ::set_gps(CAbs_lr1_sym*GPS){ gps__= GPS; if(GPS==0)return; line_no__= GPS->tok_co_ords__.line_no__; pos_in_line__= GPS->tok_co_ords__.pos_in_line__; file_no__= GPS->tok_co_ords__.external_file_id__; real_start_pos_in_line_= pos_in_line__; } yacco2::CAbs_lr1_sym*yacco2::tok_can ::gps_used(){ return gps__; } yacco2::tok_can ::~tok_can(){} bool yacco2::tok_can ::empty(){ if(string__.empty()==true)return YES; return NO; } void yacco2::tok_can ::reuse_string(const char*Str,CAbs_lr1_sym*GPS){ string__.erase(); string__+= Str; file_no__= MAX_USINT; line_no__= START_LINE_NO; pos_in_line__= START_CHAR_POS; eof_sym_= 0; real_start_pos_in_line_= START_CHAR_POS; eof_pos_= 0; if(GPS==0)return; set_gps(GPS); } /*:84*//*85:*/ //#line 572 "/usr/local/yacco2/library/tok_can.w" yacco2::CAbs_lr1_sym*yacco2::tok_can ::operator[](yacco2::UINT Pos){ CAbs_lr1_sym*sym(0); if(eof_pos_==EOF)return eof_sym_; fetch_char: if(have_1st_rec__==false){ have_1st_rec__= true; pos_= 0; }else{ if(Pos<=pos_){ return container__[Pos]; } ++pos_; } if(r_w_cnt__> 1){ /*391:*/ //#line 3068 "/usr/local/yacco2/library/parser.w" LOCK_MUTEX(yacco2::TOKEN_MU); /*:391*/ //#line 587 "/usr/local/yacco2/library/tok_can.w" } for(;;){ char c; if(pos_>=string__.size()){ eof_pos_= EOF; ++pos_; sym= RC__.map_char_to_raw_char_sym(EOF_CHAR_SUB,file_no__,pos_ ,&line_no__,&pos_in_line__); eof_sym_= sym; container__.push_back(*sym); container__.push_back(*sym); return sym; } c= string__[pos_]; convert_char_to_unsigned_value: unsigned char uc= c; UINT slno= line_no__; sym= RC__.map_char_to_raw_char_sym(uc,file_no__,pos_,&line_no__,&pos_in_line__); if(gps__!=0){ line_no__= slno; pos_in_line__= real_start_pos_in_line_+pos_; } container__.push_back(*sym); if(Pos==pos_)break; ++pos_; continue; }; if(r_w_cnt__> 1){ /*392:*/ //#line 3072 "/usr/local/yacco2/library/parser.w" UNLOCK_MUTEX(yacco2::TOKEN_MU); /*:392*/ //#line 616 "/usr/local/yacco2/library/tok_can.w" } return sym; } /*:85*//*86:*/ //#line 621 "/usr/local/yacco2/library/tok_can.w" yacco2::UINT yacco2::tok_can ::size(){ return string__.size(); } /*:86*//*87:*/ //#line 627 "/usr/local/yacco2/library/tok_can.w" yacco2::UINT yacco2::tok_can ::pos(){return pos_;} void yacco2::tok_can ::push_back(yacco2::CAbs_lr1_sym&Tok){ container__.push_back(Tok); } void yacco2::tok_can ::clear(){container__.clear(); pos_= 0; have_1st_rec__= false; file_no__= MAX_USINT; line_no__= START_LINE_NO; pos_in_line__= START_CHAR_POS; string__.clear(); eof_sym_= 0; real_start_pos_in_line_= START_CHAR_POS; eof_pos_= 0; gps__= 0; } TOKEN_GAGGLE&yacco2::tok_can ::container(){ return container__; } void tok_can ::remove(){} void yacco2::tok_can ::set_string(const char*String){ string__+= String; } std::string*yacco2::tok_can ::string_used(){return&string__;}; /*:87*//*88:*/ //#line 664 "/usr/local/yacco2/library/tok_can.w" yacco2::tok_can ::tok_can() :tok_base(1) ,pos_(0) ,have_1st_rec__(false) ,eof_pos_(EOF) ,file_ok_(NO) ,line_no__(START_LINE_NO) ,pos_in_line__(START_CHAR_POS) ,file_name__(std::string()) {} yacco2::tok_can ::tok_can(const char*File_name) :tok_base(1) ,pos_(0) ,have_1st_rec__(false) ,eof_pos_(EOF) ,file_ok_(NO) ,line_no__(START_LINE_NO) ,pos_in_line__(START_CHAR_POS) ,file_name__(File_name) { open_file(); } yacco2::tok_can ::~tok_can(){ if(file_ok_==YES) file__.close(); } bool yacco2::tok_can ::empty(){ if(have_1st_rec__==false)return YES; return NO; } /*:88*//*89:*/ //#line 703 "/usr/local/yacco2/library/tok_can.w" bool yacco2::tok_can ::file_ok(){ return file_ok_; } /*:89*//*90:*/ //#line 715 "/usr/local/yacco2/library/tok_can.w" yacco2::CAbs_lr1_sym*yacco2::tok_can ::operator[](yacco2::UINT Pos){ if(file_ok_==NO){ char a[BUFFER_SIZE]; yacco2::KCHARP msg= "tok_canoperator[] trying to access file that is bad: %s, position %i "; sprintf(a,msg,file_name__.c_str(),Pos); Yacco2_faulty_precondition(a,__FILE__,__LINE__); exit(1); } CAbs_lr1_sym*sym(0); if(eof_pos_==EOF&&Pos>=pos_){ return container__[pos_]; } fetch_char: if(have_1st_rec__==false){ have_1st_rec__= true; pos_= 0; }else{ if(Pos<=pos_){ return container__[Pos]; } ++pos_; } if(r_w_cnt__> 1){ /*391:*/ //#line 3068 "/usr/local/yacco2/library/parser.w" LOCK_MUTEX(yacco2::TOKEN_MU); /*:391*/ //#line 742 "/usr/local/yacco2/library/tok_can.w" } for(;;){ char c; file__>>c; if((file__.good()==false)or(file__.eof()==true)){ eof_pos_= EOF; ++pos_; sym= RC__.map_char_to_raw_char_sym(EOF_CHAR_SUB,file_no__,pos_ ,&line_no__,&pos_in_line__); container__.push_back(*sym); container__.push_back(*sym); return sym; } convert_char_to_unsigned_value: unsigned char uc= c; sym= RC__.map_char_to_raw_char_sym(uc,file_no__,pos_,&line_no__,&pos_in_line__); container__.push_back(*sym); if(Pos==pos_)break; ++pos_; continue; }; if(r_w_cnt__> 1){ /*392:*/ //#line 3072 "/usr/local/yacco2/library/parser.w" UNLOCK_MUTEX(yacco2::TOKEN_MU); /*:392*/ //#line 765 "/usr/local/yacco2/library/tok_can.w" } return sym; } /*:90*//*91:*/ //#line 784 "/usr/local/yacco2/library/tok_can.w" yacco2::UINT yacco2::tok_can ::size(){ return INT_MAX; } /*:91*//*92:*/ //#line 798 "/usr/local/yacco2/library/tok_can.w" void yacco2::tok_can ::open_file(){ CAbs_lr1_sym*sym(0); open_file: file__.open(file_name__.c_str(),std::ios::in); if(file__.is_open())goto filename_opened; else goto filename_bad; filename_opened:{ file_ok_= YES; ++yacco2::FILE_CNT__; have_1st_rec__= true; pos_= 0; if(yacco2::FILE_CNT__==1){ std::string empty; yacco2::FILE_TBL__.push_back(empty); } yacco2::STK_FILE_NOS__.push_back(yacco2::FILE_CNT__); file_no__= yacco2::STK_FILE_NOS__.back(); yacco2::FILE_TBL__.push_back(file_name__); eof_pos_= 0; set_dont_skip_any_chars: file__>>std::noskipws; for(;eof_pos_!=EOF;++pos_){ char c; if(file__.good()==true){ file__>>c; } if(file__.eof()==true)goto eoroad; if(file__.fail()==true)goto eoroad; convert_char_to_unsigned_value: unsigned char uc= c; sym= RC__.map_char_to_raw_char_sym(uc,file_no__,pos_,&line_no__,&pos_in_line__); container__.push_back(*sym); } } filename_bad:{ eof_pos_= EOF; file_ok_= NO; return; } eoroad:{ eof_pos_= EOF; ++pos_; sym= RC__.map_char_to_raw_char_sym(EOF_CHAR_SUB,file_no__,pos_ ,&line_no__,&pos_in_line__); container__.push_back(*sym); container__.push_back(*sym); return; } } /*:92*//*93:*/ //#line 853 "/usr/local/yacco2/library/tok_can.w" void yacco2::tok_can ::close_file(){ if(file__.is_open()){ if(file_ok_==YES){ file__.close(); } } file_ok_= false; } /*:93*//*94:*/ //#line 864 "/usr/local/yacco2/library/tok_can.w" yacco2::UINT yacco2::tok_can ::pos(){return pos_;} void yacco2::tok_can ::push_back(yacco2::CAbs_lr1_sym&Tok){ container__.push_back(Tok); } void yacco2::tok_can ::clear(){ container__.clear(); pos_= 0; have_1st_rec__= false; eof_pos_= EOF; file_ok_= NO; line_no__= START_LINE_NO; pos_in_line__= START_CHAR_POS; file_name__.clear(); } TOKEN_GAGGLE&yacco2::tok_can ::container(){ return container__; } void yacco2::tok_can ::remove(){} std::string&yacco2::tok_can ::file_name(){return file_name__;} void yacco2::tok_can ::set_file_name(const char*File_name){ file_name__+= File_name; } /*:94*//*95:*/ //#line 920 "/usr/local/yacco2/library/tok_can.w" yacco2::tok_can :: tok_can (yacco2::ast_stack&Walker) :tok_base(1) ,pos_(0) ,have_1st_rec__(false) ,tree_end_reached__(false) ,nodes_visited_() ,accept_node_level_() ,traverse_(Walker){ operator[](0); } yacco2::tok_can :: ~tok_can(){} bool yacco2::tok_can :: empty(){ return nodes_visited_.empty(); } void yacco2::tok_can :: clear(){nodes_visited_.clear();} /*:95*//*96:*/ //#line 957 "/usr/local/yacco2/library/tok_can.w" yacco2::CAbs_lr1_sym* yacco2::tok_can :: operator[](yacco2::UINT Pos){ AST*t; CAbs_lr1_sym*tsym; AST*vnode; CAbs_lr1_sym*sym; ast_base_stack::s_rec*srec; if(tree_end_reached__==true){ if(Posid__ <<" *: "<id__<<" enum: " <enumerated_id__ <tok_co_ords__.line_no__ <<" GPS CHR POS: " <tok_co_ords__.pos_in_line__ <node_; sym= AST::content(*vnode); accept_node_level_.push_back(traverse_.base_stk_.idx_); nodes_visited_.push_back(vnode); if(YACCO2_T__!=0){ /*389:*/ //#line 3053 "/usr/local/yacco2/library/parser.w" LOCK_MUTEX(yacco2::TRACE_MU); if(yacco2::YACCO2_MU_TRACING__){ yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<id__ <<" *: "< 1){ /*391:*/ //#line 3068 "/usr/local/yacco2/library/parser.w" LOCK_MUTEX(yacco2::TOKEN_MU); /*:391*/ //#line 992 "/usr/local/yacco2/library/tok_can.w" } get_tree_rec:{ /*100:*/ //#line 1074 "/usr/local/yacco2/library/tok_can.w" traverse_.exec(); /*:100*/ //#line 995 "/usr/local/yacco2/library/tok_can.w" /*101:*/ //#line 1078 "/usr/local/yacco2/library/tok_can.w" srec= traverse_.base_stk_.cur_stk_rec_; if(srec==0){ tree_end_reached__= true; if(YACCO2_T__!=0){ /*389:*/ //#line 3053 "/usr/local/yacco2/library/parser.w" LOCK_MUTEX(yacco2::TRACE_MU); if(yacco2::YACCO2_MU_TRACING__){ yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<node_; sym= AST::content(*vnode); accept_node_level_.push_back(traverse_.base_stk_.idx_); nodes_visited_.push_back(vnode); if(YACCO2_T__!=0){ /*389:*/ //#line 3053 "/usr/local/yacco2/library/parser.w" LOCK_MUTEX(yacco2::TRACE_MU); if(yacco2::YACCO2_MU_TRACING__){ yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<id__ <<" *: "< 1){ /*392:*/ //#line 3072 "/usr/local/yacco2/library/parser.w" UNLOCK_MUTEX(yacco2::TOKEN_MU); /*:392*/ //#line 1004 "/usr/local/yacco2/library/tok_can.w" } return sym; } /*:96*//*103:*/ //#line 1110 "/usr/local/yacco2/library/tok_can.w" yacco2::UINT yacco2::tok_can :: pos(){return pos_;} yacco2::UINT yacco2::tok_can :: size(){ if(tree_end_reached__==true){ return nodes_visited_.size(); } return MAX_UINT; } void yacco2::tok_can :: push_back(AST&Tok_ast){ nodes_visited_.push_back(&Tok_ast); ++pos_; } void yacco2::tok_can :: push_back(yacco2::CAbs_lr1_sym&Node){} yacco2::ast_stack& yacco2::tok_can :: container(){ return traverse_; } std::vector * yacco2::tok_can :: nodes_visited(){ return&nodes_visited_; } void yacco2::tok_can :: remove(){ nodes_visited_.pop_back(); --pos_; } yacco2::AST* yacco2::tok_can :: ast(yacco2::UINT Pos){ if(Pos> pos_)return 0; return nodes_visited_.operator[](Pos); } yacco2::INT yacco2::tok_can :: accept_node_level(yacco2::UINT Pos){ if((accept_node_level_.size()-1)