diff options
Diffstat (limited to 'web/yacco2/library/wtree.cpp')
-rw-r--r-- | web/yacco2/library/wtree.cpp | 2602 |
1 files changed, 2602 insertions, 0 deletions
diff --git a/web/yacco2/library/wtree.cpp b/web/yacco2/library/wtree.cpp new file mode 100644 index 0000000000..10e5bf3653 --- /dev/null +++ b/web/yacco2/library/wtree.cpp @@ -0,0 +1,2602 @@ +/*450:*/ +//#line 235 "/usr/local/yacco2/library/tree.w" + +/*565:*/ +//#line 24 "/usr/local/yacco2/library/macros.w" + + + +/*:565*/ +//#line 236 "/usr/local/yacco2/library/tree.w" + +/*26:*/ +//#line 404 "/usr/local/yacco2/library/intro.w" + +#include "yacco2.h" + +/*:26*/ +//#line 237 "/usr/local/yacco2/library/tree.w" + +/*451:*/ +//#line 241 "/usr/local/yacco2/library/tree.w" + + +/*:451*//*452:*/ +//#line 244 "/usr/local/yacco2/library/tree.w" + +yacco2::ast_base_stack:: +ast_base_stack(Type_AST_functor*Action,yacco2::int_set_type*Filter,bool Accept_opt) +:idx_(No_Token_start_pos) +,stk_(std::vector<s_rec> ()) +,action_(Action) +,cur_stk_rec_(0) +,filter_(Filter) +,accept_opt_(Accept_opt){} + +yacco2::ast_base_stack:: +ast_base_stack() +:idx_(No_Token_start_pos) +,stk_(std::vector<s_rec> ()) +,action_(0) +,cur_stk_rec_(0) +,filter_(0) +,accept_opt_(YES){} + +yacco2::ast_stack:: +ast_stack(Type_AST_functor*Action,yacco2::int_set_type*Filter,bool Accept_opt) +:base_stk_(Action,Filter,Accept_opt){} + +void +yacco2::ast_base_stack:: +pop(){ +if(stk_.empty()==YES)return; +--idx_; +stk_.pop_back(); +if(stk_.empty()==YES){ +idx_= No_Token_start_pos; +cur_stk_rec_= 0; +return; +} +cur_stk_rec_= &stk_[idx_]; +} + +void +yacco2::ast_base_stack:: +push(AST&Node,ast_base_stack::n_action Action){ +++idx_; +stk_.push_back(yacco2::ast_base_stack::s_rec()); +cur_stk_rec_= &stk_[idx_]; +cur_stk_rec_->node_= &Node; +cur_stk_rec_->act_= Action; +} + +yacco2::INT +yacco2::ast_base_stack:: +cur_stk_index(){ +return idx_; +} + +yacco2::ast_base_stack::s_rec* +yacco2::ast_base_stack:: +cur_stk_rec(){ +return cur_stk_rec_; +} + +yacco2::ast_base_stack::s_rec* +yacco2::ast_base_stack:: +stk_rec(yacco2::INT I){ +if(I> idx_)return 0; +return&stk_[I]; +} + +/*:452*//*454:*/ +//#line 313 "/usr/local/yacco2/library/tree.w" + +yacco2::ast_postfix:: +ast_postfix(AST&Forest,Type_AST_functor*Action +,yacco2::int_set_type*Filter,bool Accept_opt) +:yacco2::ast_stack(Action,Filter,Accept_opt){ +base_stk_.push(Forest,ast_base_stack::init); +} + +/*:454*//*455:*/ +//#line 325 "/usr/local/yacco2/library/tree.w" + +void +yacco2::ast_postfix:: +exec(){ +/*435:*/ +//#line 80 "/usr/local/yacco2/library/tree.w" + +advance(); +int_set_iter_type i; +CAbs_lr1_sym*sym; +tree_traverse:{ +if(base_stk_.cur_stk_rec_==0)return; +if(base_stk_.cur_stk_rec_->act_!=ast_base_stack::visit){ +/*437:*/ +//#line 113 "/usr/local/yacco2/library/tree.w" + +goto next_t; +/*:437*/ +//#line 87 "/usr/local/yacco2/library/tree.w" + +} +sym= AST::content(*base_stk_.cur_stk_rec_->node_); +if(base_stk_.filter_==0)/*438:*/ +//#line 116 "/usr/local/yacco2/library/tree.w" + +goto accept_t; +/*:438*/ +//#line 90 "/usr/local/yacco2/library/tree.w" + +filter_node: +/*442:*/ +//#line 143 "/usr/local/yacco2/library/tree.w" + +i= base_stk_.filter_->find(sym->enumerated_id__); + +/*:442*/ +//#line 92 "/usr/local/yacco2/library/tree.w" + +/*436:*/ +//#line 107 "/usr/local/yacco2/library/tree.w" + +if(base_stk_.accept_opt_==true) +goto accept_filter; +else goto reject_filter; + +/*:436*/ +//#line 93 "/usr/local/yacco2/library/tree.w" + +reject_filter: +/*441:*/ +//#line 137 "/usr/local/yacco2/library/tree.w" + +if(i!=base_stk_.filter_->end())/*437:*/ +//#line 113 "/usr/local/yacco2/library/tree.w" + +goto next_t; +/*:437*/ +//#line 138 "/usr/local/yacco2/library/tree.w" + +/*438:*/ +//#line 116 "/usr/local/yacco2/library/tree.w" + +goto accept_t; +/*:438*/ +//#line 139 "/usr/local/yacco2/library/tree.w" + + + +/*:441*/ +//#line 95 "/usr/local/yacco2/library/tree.w" + +accept_filter: +/*440:*/ +//#line 131 "/usr/local/yacco2/library/tree.w" + +if(i==base_stk_.filter_->end())/*437:*/ +//#line 113 "/usr/local/yacco2/library/tree.w" + +goto next_t; +/*:437*/ +//#line 132 "/usr/local/yacco2/library/tree.w" + +/*438:*/ +//#line 116 "/usr/local/yacco2/library/tree.w" + +goto accept_t; +/*:438*/ +//#line 133 "/usr/local/yacco2/library/tree.w" + + + +/*:440*/ +//#line 97 "/usr/local/yacco2/library/tree.w" + +next_t: +advance(); +goto tree_traverse; +} +accept_t: +/*439:*/ +//#line 119 "/usr/local/yacco2/library/tree.w" + +yacco2::functor_result_type rr= base_stk_.action_->operator()(&base_stk_); +switch(rr){ +case yacco2::bypass_node:goto next_t; +case yacco2::accept_node:return; +case yacco2::stop_walking:{ +base_stk_.cur_stk_rec_= 0; +return; +} +} + +/*:439*/ +//#line 103 "/usr/local/yacco2/library/tree.w" + +return; + +/*:435*/ +//#line 329 "/usr/local/yacco2/library/tree.w" + +} + + +/*:455*//*456:*/ +//#line 334 "/usr/local/yacco2/library/tree.w" + +void +yacco2::ast_postfix:: +advance(){ +if(base_stk_.cur_stk_rec_==0)return; +switch(base_stk_.cur_stk_rec_->act_){ +case ast_base_stack::init:{ +AST*down= AST::get_1st_son(*base_stk_.cur_stk_rec_->node_); +if(down==0){ +base_stk_.cur_stk_rec_->act_= ast_base_stack::visit; +return; +} +base_stk_.cur_stk_rec_->act_= ast_base_stack::left; +base_stk_.push(*down,ast_base_stack::init); +return; +} +case ast_base_stack::left:{ +base_stk_.cur_stk_rec_->act_= ast_base_stack::visit; +return; +} +case ast_base_stack::visit:{ +AST*rt= AST::brother(*base_stk_.cur_stk_rec_->node_); +if(rt==0){ +base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc; +return; +} +base_stk_.pop(); +base_stk_.push(*rt,ast_base_stack::init); +return; +} +case ast_base_stack::right:{ +base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc; +return; +} +case ast_base_stack::eoc:{ +base_stk_.pop(); +return; +} +} +} + +/*:456*//*457:*/ +//#line 377 "/usr/local/yacco2/library/tree.w" + +yacco2::ast_prefix:: +ast_prefix(AST&Forest,Type_AST_functor*Action +,yacco2::int_set_type*Filter,bool Accept_opt) +:yacco2::ast_stack(Action,Filter,Accept_opt){ +base_stk_.push(Forest,ast_base_stack::init); +} + +/*:457*//*458:*/ +//#line 386 "/usr/local/yacco2/library/tree.w" + +void +yacco2::ast_prefix:: +exec(){ +/*435:*/ +//#line 80 "/usr/local/yacco2/library/tree.w" + +advance(); +int_set_iter_type i; +CAbs_lr1_sym*sym; +tree_traverse:{ +if(base_stk_.cur_stk_rec_==0)return; +if(base_stk_.cur_stk_rec_->act_!=ast_base_stack::visit){ +/*437:*/ +//#line 113 "/usr/local/yacco2/library/tree.w" + +goto next_t; +/*:437*/ +//#line 87 "/usr/local/yacco2/library/tree.w" + +} +sym= AST::content(*base_stk_.cur_stk_rec_->node_); +if(base_stk_.filter_==0)/*438:*/ +//#line 116 "/usr/local/yacco2/library/tree.w" + +goto accept_t; +/*:438*/ +//#line 90 "/usr/local/yacco2/library/tree.w" + +filter_node: +/*442:*/ +//#line 143 "/usr/local/yacco2/library/tree.w" + +i= base_stk_.filter_->find(sym->enumerated_id__); + +/*:442*/ +//#line 92 "/usr/local/yacco2/library/tree.w" + +/*436:*/ +//#line 107 "/usr/local/yacco2/library/tree.w" + +if(base_stk_.accept_opt_==true) +goto accept_filter; +else goto reject_filter; + +/*:436*/ +//#line 93 "/usr/local/yacco2/library/tree.w" + +reject_filter: +/*441:*/ +//#line 137 "/usr/local/yacco2/library/tree.w" + +if(i!=base_stk_.filter_->end())/*437:*/ +//#line 113 "/usr/local/yacco2/library/tree.w" + +goto next_t; +/*:437*/ +//#line 138 "/usr/local/yacco2/library/tree.w" + +/*438:*/ +//#line 116 "/usr/local/yacco2/library/tree.w" + +goto accept_t; +/*:438*/ +//#line 139 "/usr/local/yacco2/library/tree.w" + + + +/*:441*/ +//#line 95 "/usr/local/yacco2/library/tree.w" + +accept_filter: +/*440:*/ +//#line 131 "/usr/local/yacco2/library/tree.w" + +if(i==base_stk_.filter_->end())/*437:*/ +//#line 113 "/usr/local/yacco2/library/tree.w" + +goto next_t; +/*:437*/ +//#line 132 "/usr/local/yacco2/library/tree.w" + +/*438:*/ +//#line 116 "/usr/local/yacco2/library/tree.w" + +goto accept_t; +/*:438*/ +//#line 133 "/usr/local/yacco2/library/tree.w" + + + +/*:440*/ +//#line 97 "/usr/local/yacco2/library/tree.w" + +next_t: +advance(); +goto tree_traverse; +} +accept_t: +/*439:*/ +//#line 119 "/usr/local/yacco2/library/tree.w" + +yacco2::functor_result_type rr= base_stk_.action_->operator()(&base_stk_); +switch(rr){ +case yacco2::bypass_node:goto next_t; +case yacco2::accept_node:return; +case yacco2::stop_walking:{ +base_stk_.cur_stk_rec_= 0; +return; +} +} + +/*:439*/ +//#line 103 "/usr/local/yacco2/library/tree.w" + +return; + +/*:435*/ +//#line 390 "/usr/local/yacco2/library/tree.w" + +} + +/*:458*//*459:*/ +//#line 394 "/usr/local/yacco2/library/tree.w" + +void +yacco2::ast_prefix:: +advance(){ +if(base_stk_.cur_stk_rec_==0)return; +switch(base_stk_.cur_stk_rec_->act_){ +case ast_base_stack::init:{ +base_stk_.cur_stk_rec_->act_= ast_base_stack::visit; +return; +} +case ast_base_stack::left:{ +AST*rt= AST::brother(*base_stk_.cur_stk_rec_->node_); +if(rt!=0){ +base_stk_.pop(); +base_stk_.push(*rt,ast_base_stack::init); +return; +} +base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc; +return; +} +case ast_base_stack::visit:{ +AST*lt= AST::get_1st_son(*base_stk_.cur_stk_rec_->node_); +if(lt!=0){ +base_stk_.cur_stk_rec_->act_= ast_base_stack::left; +base_stk_.push(*lt,ast_base_stack::init); +return; +} +AST*rt= AST::brother(*base_stk_.cur_stk_rec_->node_); +if(rt!=0){ +base_stk_.pop(); +base_stk_.push(*rt,ast_base_stack::init); +return; +} +base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc; +return; +} +case ast_base_stack::right:{ +base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc; +return; +} +case ast_base_stack::eoc:{ +base_stk_.pop(); +return; +} +} +} + +/*:459*//*460:*/ +//#line 443 "/usr/local/yacco2/library/tree.w" + +yacco2::ast_postfix_1forest:: +ast_postfix_1forest(AST&Forest,Type_AST_functor*Action +,yacco2::int_set_type*Filter,bool Accept_opt) +:yacco2::ast_stack(Action,Filter,Accept_opt){ +base_stk_.push(Forest,ast_base_stack::init); +} + +/*:460*//*461:*/ +//#line 452 "/usr/local/yacco2/library/tree.w" + +void +yacco2::ast_postfix_1forest:: +exec(){ +/*435:*/ +//#line 80 "/usr/local/yacco2/library/tree.w" + +advance(); +int_set_iter_type i; +CAbs_lr1_sym*sym; +tree_traverse:{ +if(base_stk_.cur_stk_rec_==0)return; +if(base_stk_.cur_stk_rec_->act_!=ast_base_stack::visit){ +/*437:*/ +//#line 113 "/usr/local/yacco2/library/tree.w" + +goto next_t; +/*:437*/ +//#line 87 "/usr/local/yacco2/library/tree.w" + +} +sym= AST::content(*base_stk_.cur_stk_rec_->node_); +if(base_stk_.filter_==0)/*438:*/ +//#line 116 "/usr/local/yacco2/library/tree.w" + +goto accept_t; +/*:438*/ +//#line 90 "/usr/local/yacco2/library/tree.w" + +filter_node: +/*442:*/ +//#line 143 "/usr/local/yacco2/library/tree.w" + +i= base_stk_.filter_->find(sym->enumerated_id__); + +/*:442*/ +//#line 92 "/usr/local/yacco2/library/tree.w" + +/*436:*/ +//#line 107 "/usr/local/yacco2/library/tree.w" + +if(base_stk_.accept_opt_==true) +goto accept_filter; +else goto reject_filter; + +/*:436*/ +//#line 93 "/usr/local/yacco2/library/tree.w" + +reject_filter: +/*441:*/ +//#line 137 "/usr/local/yacco2/library/tree.w" + +if(i!=base_stk_.filter_->end())/*437:*/ +//#line 113 "/usr/local/yacco2/library/tree.w" + +goto next_t; +/*:437*/ +//#line 138 "/usr/local/yacco2/library/tree.w" + +/*438:*/ +//#line 116 "/usr/local/yacco2/library/tree.w" + +goto accept_t; +/*:438*/ +//#line 139 "/usr/local/yacco2/library/tree.w" + + + +/*:441*/ +//#line 95 "/usr/local/yacco2/library/tree.w" + +accept_filter: +/*440:*/ +//#line 131 "/usr/local/yacco2/library/tree.w" + +if(i==base_stk_.filter_->end())/*437:*/ +//#line 113 "/usr/local/yacco2/library/tree.w" + +goto next_t; +/*:437*/ +//#line 132 "/usr/local/yacco2/library/tree.w" + +/*438:*/ +//#line 116 "/usr/local/yacco2/library/tree.w" + +goto accept_t; +/*:438*/ +//#line 133 "/usr/local/yacco2/library/tree.w" + + + +/*:440*/ +//#line 97 "/usr/local/yacco2/library/tree.w" + +next_t: +advance(); +goto tree_traverse; +} +accept_t: +/*439:*/ +//#line 119 "/usr/local/yacco2/library/tree.w" + +yacco2::functor_result_type rr= base_stk_.action_->operator()(&base_stk_); +switch(rr){ +case yacco2::bypass_node:goto next_t; +case yacco2::accept_node:return; +case yacco2::stop_walking:{ +base_stk_.cur_stk_rec_= 0; +return; +} +} + +/*:439*/ +//#line 103 "/usr/local/yacco2/library/tree.w" + +return; + +/*:435*/ +//#line 456 "/usr/local/yacco2/library/tree.w" + +} + +/*:461*//*462:*/ +//#line 460 "/usr/local/yacco2/library/tree.w" + +void +yacco2::ast_postfix_1forest:: +advance(){ +if(base_stk_.cur_stk_rec_==0)return; +switch(base_stk_.cur_stk_rec_->act_){ +case ast_base_stack::init:{ +AST*down= AST::get_1st_son(*base_stk_.cur_stk_rec_->node_); +if(down==0){ +base_stk_.cur_stk_rec_->act_= ast_base_stack::visit; +return; +} +base_stk_.cur_stk_rec_->act_= ast_base_stack::left; +base_stk_.push(*down,ast_base_stack::init); +return; +} +case ast_base_stack::left:{ +base_stk_.cur_stk_rec_->act_= ast_base_stack::visit; +return; +} +case ast_base_stack::visit:{ +AST*rt(0); +if(base_stk_.idx_!=0) +rt= AST::brother(*base_stk_.cur_stk_rec_->node_); +if(rt==0){ +base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc; +return; +} +base_stk_.pop(); +base_stk_.push(*rt,ast_base_stack::init); +return; +} +case ast_base_stack::right:{ +base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc; +return; +} +case ast_base_stack::eoc:{ +base_stk_.pop(); +return; +} +} +} + +/*:462*//*463:*/ +//#line 505 "/usr/local/yacco2/library/tree.w" + +yacco2::ast_prefix_1forest:: +ast_prefix_1forest(AST&Forest,Type_AST_functor*Action +,yacco2::int_set_type*Filter,bool Accept_opt) +:yacco2::ast_stack(Action,Filter,Accept_opt){ +base_stk_.push(Forest,ast_base_stack::init); +} + +/*:463*//*464:*/ +//#line 514 "/usr/local/yacco2/library/tree.w" + +void +yacco2::ast_prefix_1forest:: +exec(){ +/*435:*/ +//#line 80 "/usr/local/yacco2/library/tree.w" + +advance(); +int_set_iter_type i; +CAbs_lr1_sym*sym; +tree_traverse:{ +if(base_stk_.cur_stk_rec_==0)return; +if(base_stk_.cur_stk_rec_->act_!=ast_base_stack::visit){ +/*437:*/ +//#line 113 "/usr/local/yacco2/library/tree.w" + +goto next_t; +/*:437*/ +//#line 87 "/usr/local/yacco2/library/tree.w" + +} +sym= AST::content(*base_stk_.cur_stk_rec_->node_); +if(base_stk_.filter_==0)/*438:*/ +//#line 116 "/usr/local/yacco2/library/tree.w" + +goto accept_t; +/*:438*/ +//#line 90 "/usr/local/yacco2/library/tree.w" + +filter_node: +/*442:*/ +//#line 143 "/usr/local/yacco2/library/tree.w" + +i= base_stk_.filter_->find(sym->enumerated_id__); + +/*:442*/ +//#line 92 "/usr/local/yacco2/library/tree.w" + +/*436:*/ +//#line 107 "/usr/local/yacco2/library/tree.w" + +if(base_stk_.accept_opt_==true) +goto accept_filter; +else goto reject_filter; + +/*:436*/ +//#line 93 "/usr/local/yacco2/library/tree.w" + +reject_filter: +/*441:*/ +//#line 137 "/usr/local/yacco2/library/tree.w" + +if(i!=base_stk_.filter_->end())/*437:*/ +//#line 113 "/usr/local/yacco2/library/tree.w" + +goto next_t; +/*:437*/ +//#line 138 "/usr/local/yacco2/library/tree.w" + +/*438:*/ +//#line 116 "/usr/local/yacco2/library/tree.w" + +goto accept_t; +/*:438*/ +//#line 139 "/usr/local/yacco2/library/tree.w" + + + +/*:441*/ +//#line 95 "/usr/local/yacco2/library/tree.w" + +accept_filter: +/*440:*/ +//#line 131 "/usr/local/yacco2/library/tree.w" + +if(i==base_stk_.filter_->end())/*437:*/ +//#line 113 "/usr/local/yacco2/library/tree.w" + +goto next_t; +/*:437*/ +//#line 132 "/usr/local/yacco2/library/tree.w" + +/*438:*/ +//#line 116 "/usr/local/yacco2/library/tree.w" + +goto accept_t; +/*:438*/ +//#line 133 "/usr/local/yacco2/library/tree.w" + + + +/*:440*/ +//#line 97 "/usr/local/yacco2/library/tree.w" + +next_t: +advance(); +goto tree_traverse; +} +accept_t: +/*439:*/ +//#line 119 "/usr/local/yacco2/library/tree.w" + +yacco2::functor_result_type rr= base_stk_.action_->operator()(&base_stk_); +switch(rr){ +case yacco2::bypass_node:goto next_t; +case yacco2::accept_node:return; +case yacco2::stop_walking:{ +base_stk_.cur_stk_rec_= 0; +return; +} +} + +/*:439*/ +//#line 103 "/usr/local/yacco2/library/tree.w" + +return; + +/*:435*/ +//#line 518 "/usr/local/yacco2/library/tree.w" + +} + +/*:464*//*465:*/ +//#line 522 "/usr/local/yacco2/library/tree.w" + +void +yacco2::ast_prefix_1forest:: +advance(){ +if(base_stk_.cur_stk_rec_==0)return; +switch(base_stk_.cur_stk_rec_->act_){ +case ast_base_stack::init:{ +base_stk_.cur_stk_rec_->act_= ast_base_stack::visit; +return; +} +case ast_base_stack::left:{ +AST*rt(0); +if(base_stk_.idx_!=0) +rt= AST::brother(*base_stk_.cur_stk_rec_->node_); +if(rt!=0){ +base_stk_.pop(); +base_stk_.push(*rt,ast_base_stack::init); +return; +} +base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc; +return; +} +case ast_base_stack::visit:{ +AST*lt= AST::get_1st_son(*base_stk_.cur_stk_rec_->node_); +if(lt!=0){ +base_stk_.cur_stk_rec_->act_= ast_base_stack::left; +base_stk_.push(*lt,ast_base_stack::init); +return; +} +AST*rt(0); +if(base_stk_.idx_!=0) +rt= AST::brother(*base_stk_.cur_stk_rec_->node_); +if(rt!=0){ +base_stk_.pop(); +base_stk_.push(*rt,ast_base_stack::init); +return; +} +base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc; +return; +} +case ast_base_stack::right:{ +base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc; +return; +} +case ast_base_stack::eoc:{ +base_stk_.pop(); +return; +} +} +} + +/*:465*//*466:*/ +//#line 575 "/usr/local/yacco2/library/tree.w" + +yacco2::ast_breadth_only:: +ast_breadth_only(AST&Forest,Type_AST_functor*Action +,yacco2::int_set_type*Filter,bool Accept_opt) +:yacco2::ast_stack(Action,Filter,Accept_opt){ +base_stk_.push(Forest,ast_base_stack::init); +} + +/*:466*//*467:*/ +//#line 584 "/usr/local/yacco2/library/tree.w" + +void +yacco2::ast_breadth_only:: +exec(){ +/*435:*/ +//#line 80 "/usr/local/yacco2/library/tree.w" + +advance(); +int_set_iter_type i; +CAbs_lr1_sym*sym; +tree_traverse:{ +if(base_stk_.cur_stk_rec_==0)return; +if(base_stk_.cur_stk_rec_->act_!=ast_base_stack::visit){ +/*437:*/ +//#line 113 "/usr/local/yacco2/library/tree.w" + +goto next_t; +/*:437*/ +//#line 87 "/usr/local/yacco2/library/tree.w" + +} +sym= AST::content(*base_stk_.cur_stk_rec_->node_); +if(base_stk_.filter_==0)/*438:*/ +//#line 116 "/usr/local/yacco2/library/tree.w" + +goto accept_t; +/*:438*/ +//#line 90 "/usr/local/yacco2/library/tree.w" + +filter_node: +/*442:*/ +//#line 143 "/usr/local/yacco2/library/tree.w" + +i= base_stk_.filter_->find(sym->enumerated_id__); + +/*:442*/ +//#line 92 "/usr/local/yacco2/library/tree.w" + +/*436:*/ +//#line 107 "/usr/local/yacco2/library/tree.w" + +if(base_stk_.accept_opt_==true) +goto accept_filter; +else goto reject_filter; + +/*:436*/ +//#line 93 "/usr/local/yacco2/library/tree.w" + +reject_filter: +/*441:*/ +//#line 137 "/usr/local/yacco2/library/tree.w" + +if(i!=base_stk_.filter_->end())/*437:*/ +//#line 113 "/usr/local/yacco2/library/tree.w" + +goto next_t; +/*:437*/ +//#line 138 "/usr/local/yacco2/library/tree.w" + +/*438:*/ +//#line 116 "/usr/local/yacco2/library/tree.w" + +goto accept_t; +/*:438*/ +//#line 139 "/usr/local/yacco2/library/tree.w" + + + +/*:441*/ +//#line 95 "/usr/local/yacco2/library/tree.w" + +accept_filter: +/*440:*/ +//#line 131 "/usr/local/yacco2/library/tree.w" + +if(i==base_stk_.filter_->end())/*437:*/ +//#line 113 "/usr/local/yacco2/library/tree.w" + +goto next_t; +/*:437*/ +//#line 132 "/usr/local/yacco2/library/tree.w" + +/*438:*/ +//#line 116 "/usr/local/yacco2/library/tree.w" + +goto accept_t; +/*:438*/ +//#line 133 "/usr/local/yacco2/library/tree.w" + + + +/*:440*/ +//#line 97 "/usr/local/yacco2/library/tree.w" + +next_t: +advance(); +goto tree_traverse; +} +accept_t: +/*439:*/ +//#line 119 "/usr/local/yacco2/library/tree.w" + +yacco2::functor_result_type rr= base_stk_.action_->operator()(&base_stk_); +switch(rr){ +case yacco2::bypass_node:goto next_t; +case yacco2::accept_node:return; +case yacco2::stop_walking:{ +base_stk_.cur_stk_rec_= 0; +return; +} +} + +/*:439*/ +//#line 103 "/usr/local/yacco2/library/tree.w" + +return; + +/*:435*/ +//#line 588 "/usr/local/yacco2/library/tree.w" + +} + +/*:467*//*468:*/ +//#line 592 "/usr/local/yacco2/library/tree.w" + +void +yacco2::ast_breadth_only:: +advance(){ +if(base_stk_.cur_stk_rec_==0)return; +switch(base_stk_.cur_stk_rec_->act_){ +case ast_base_stack::init:{ +base_stk_.cur_stk_rec_->act_= ast_base_stack::visit; +return; +} +case ast_base_stack::left:{ +AST*rt= AST::brother(*base_stk_.cur_stk_rec_->node_); +if(rt!=0){ +base_stk_.pop(); +base_stk_.push(*rt,ast_base_stack::init); +return; +} +base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc; +return; +} +case ast_base_stack::visit:{ +AST*rt= AST::brother(*base_stk_.cur_stk_rec_->node_); +if(rt!=0){ +base_stk_.pop(); +base_stk_.push(*rt,ast_base_stack::init); +return; +} +base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc; +return; +} +case ast_base_stack::right:{ +base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc; +return; +} +case ast_base_stack::eoc:{ +base_stk_.pop(); +return; +} +} +} + +/*:468*//*469:*/ +//#line 635 "/usr/local/yacco2/library/tree.w" + +yacco2::ast_prefix_wbreadth_only:: +ast_prefix_wbreadth_only(AST&Forest,Type_AST_functor*Action +,yacco2::int_set_type*Filter,bool Accept_opt) +:yacco2::ast_stack(Action,Filter,Accept_opt){ +base_stk_.push(Forest,ast_base_stack::init); +} + +/*:469*//*470:*/ +//#line 644 "/usr/local/yacco2/library/tree.w" + +void +yacco2::ast_prefix_wbreadth_only:: +exec(){ +/*435:*/ +//#line 80 "/usr/local/yacco2/library/tree.w" + +advance(); +int_set_iter_type i; +CAbs_lr1_sym*sym; +tree_traverse:{ +if(base_stk_.cur_stk_rec_==0)return; +if(base_stk_.cur_stk_rec_->act_!=ast_base_stack::visit){ +/*437:*/ +//#line 113 "/usr/local/yacco2/library/tree.w" + +goto next_t; +/*:437*/ +//#line 87 "/usr/local/yacco2/library/tree.w" + +} +sym= AST::content(*base_stk_.cur_stk_rec_->node_); +if(base_stk_.filter_==0)/*438:*/ +//#line 116 "/usr/local/yacco2/library/tree.w" + +goto accept_t; +/*:438*/ +//#line 90 "/usr/local/yacco2/library/tree.w" + +filter_node: +/*442:*/ +//#line 143 "/usr/local/yacco2/library/tree.w" + +i= base_stk_.filter_->find(sym->enumerated_id__); + +/*:442*/ +//#line 92 "/usr/local/yacco2/library/tree.w" + +/*436:*/ +//#line 107 "/usr/local/yacco2/library/tree.w" + +if(base_stk_.accept_opt_==true) +goto accept_filter; +else goto reject_filter; + +/*:436*/ +//#line 93 "/usr/local/yacco2/library/tree.w" + +reject_filter: +/*441:*/ +//#line 137 "/usr/local/yacco2/library/tree.w" + +if(i!=base_stk_.filter_->end())/*437:*/ +//#line 113 "/usr/local/yacco2/library/tree.w" + +goto next_t; +/*:437*/ +//#line 138 "/usr/local/yacco2/library/tree.w" + +/*438:*/ +//#line 116 "/usr/local/yacco2/library/tree.w" + +goto accept_t; +/*:438*/ +//#line 139 "/usr/local/yacco2/library/tree.w" + + + +/*:441*/ +//#line 95 "/usr/local/yacco2/library/tree.w" + +accept_filter: +/*440:*/ +//#line 131 "/usr/local/yacco2/library/tree.w" + +if(i==base_stk_.filter_->end())/*437:*/ +//#line 113 "/usr/local/yacco2/library/tree.w" + +goto next_t; +/*:437*/ +//#line 132 "/usr/local/yacco2/library/tree.w" + +/*438:*/ +//#line 116 "/usr/local/yacco2/library/tree.w" + +goto accept_t; +/*:438*/ +//#line 133 "/usr/local/yacco2/library/tree.w" + + + +/*:440*/ +//#line 97 "/usr/local/yacco2/library/tree.w" + +next_t: +advance(); +goto tree_traverse; +} +accept_t: +/*439:*/ +//#line 119 "/usr/local/yacco2/library/tree.w" + +yacco2::functor_result_type rr= base_stk_.action_->operator()(&base_stk_); +switch(rr){ +case yacco2::bypass_node:goto next_t; +case yacco2::accept_node:return; +case yacco2::stop_walking:{ +base_stk_.cur_stk_rec_= 0; +return; +} +} + +/*:439*/ +//#line 103 "/usr/local/yacco2/library/tree.w" + +return; + +/*:435*/ +//#line 648 "/usr/local/yacco2/library/tree.w" + +} + +/*:470*//*471:*/ +//#line 652 "/usr/local/yacco2/library/tree.w" + +void +yacco2::ast_prefix_wbreadth_only:: +advance(){ +if(base_stk_.cur_stk_rec_==0)return; +switch(base_stk_.cur_stk_rec_->act_){ +case ast_base_stack::init:{ +base_stk_.cur_stk_rec_->act_= ast_base_stack::visit; +return; +} +case ast_base_stack::left:{ +if(base_stk_.idx_==0){ +base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc; +return; +} +AST*rt= AST::brother(*base_stk_.cur_stk_rec_->node_); +if(rt!=0){ +base_stk_.pop(); +base_stk_.push(*rt,ast_base_stack::init); +return; +} +base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc; +return; +} +case ast_base_stack::visit:{ +if(base_stk_.idx_==0){ +AST*lt= AST::get_1st_son(*base_stk_.cur_stk_rec_->node_); +if(lt==0){ +base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc; +return; +} +base_stk_.cur_stk_rec_->act_= ast_base_stack::left; +base_stk_.push(*lt,ast_base_stack::init); +return; +} +AST*rt= AST::brother(*base_stk_.cur_stk_rec_->node_); +if(rt!=0){ +base_stk_.pop(); +base_stk_.push(*rt,ast_base_stack::init); +return; +} +base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc; +return; +} +case ast_base_stack::right:{ +base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc; +return; +} +case ast_base_stack::eoc:{ +base_stk_.pop(); +return; +} +} +} +/*:471*//*472:*/ +//#line 707 "/usr/local/yacco2/library/tree.w" + +yacco2::ast_moonwalk_looking_for_ancestors::ast_moonwalk_looking_for_ancestors +(AST&Moonchild,USINT Goal,Type_AST_ancestor_list&Ancestors_list,Type_AST_functor*Functor +,yacco2::int_set_type*Filter,bool Accept_opt) +:moonchild_(&Moonchild) +,goal_(Goal) +,ancestor_list_(&Ancestors_list) +,functor_(Functor) +,filter_(Filter) +,filter_type_(Accept_opt) +,filter_provided_(NO) +{ +if(Filter!=0)filter_provided_= YES; +} +/*:472*//*473:*/ +//#line 724 "/usr/local/yacco2/library/tree.w" + +yacco2::functor_result_type +yacco2::ast_moonwalk_looking_for_ancestors::let_s_functor(AST*Parent) +{ +functor_result_type functor_result; +yacco2::ast_base_stack abs; +abs.push(*Parent,ast_base_stack::init); +return functor_->operator()(&abs); +} + +/*:473*//*474:*/ +//#line 738 "/usr/local/yacco2/library/tree.w" + +bool +yacco2::ast_moonwalk_looking_for_ancestors::deal_with_functor(AST*Parent) +{ +if(functor_!=0){ +functor_result_type functor_result= let_s_functor(Parent); +switch(functor_result){ +case accept_node:{ +ancestor_list_->push_back(Parent); +return YES; +} +case bypass_node:{ +return YES; +} +case stop_walking:{ +return NO; +} +} +}else{ +ancestor_list_->push_back(Parent); +return YES; +} +return YES; +} + +/*:474*//*475:*/ +//#line 765 "/usr/local/yacco2/library/tree.w" + +void +yacco2::ast_moonwalk_looking_for_ancestors::let_s_moonwalk() +{ +functor_result_type functor_result; +AST*cnode= moonchild_; +AST*parent(0); +while(cnode!=0){ +parent= AST::get_parent(*cnode); +bool continue_waldo= deal_with_parent(parent); +if(continue_waldo==NO)return; +cnode= parent; +} +} + +/*:475*//*476:*/ +//#line 782 "/usr/local/yacco2/library/tree.w" + +bool +yacco2::ast_moonwalk_looking_for_ancestors::deal_with_parent(AST*Parent) +{ +if(Parent==0){ +return NO; +} +CAbs_lr1_sym*tsym= AST::content(*Parent); +USINT id= tsym->enumerated_id(); +if(id==goal_){ +ancestor_list_->push_back(Parent); +return NO; +} +/*477:*/ +//#line 812 "/usr/local/yacco2/library/tree.w" + +if(filter_provided_==NO)goto no_filter_so_accept_all_Tes; +else goto filtered_Tes; + + +/*:477*/ +//#line 795 "/usr/local/yacco2/library/tree.w" + +no_filter_so_accept_all_Tes:{ +return deal_with_functor(Parent); +} +filtered_Tes:{ +int_set_iter_type i= filter_->find(id); +if(i==filter_->end()){ +if(filter_type_==ACCEPT_FILTER)return YES; +return deal_with_functor(Parent); +} + +if(filter_type_==BYPASS_FILTER)return YES; +return deal_with_functor(Parent); +} +} + +/*:476*//*479:*/ +//#line 819 "/usr/local/yacco2/library/tree.w" + +yacco2::AST*yacco2::AST:: +restructure_2trees_into_1tree(AST&S1,AST&S2){ +AST*s2lt= AST::get_1st_son(S2); +AST::zero_1st_son(S2); +AST::crt_tree_of_2sons(S2,S1,*s2lt); +return&S2; +} +/*:479*//*480:*/ +//#line 828 "/usr/local/yacco2/library/tree.w" + +void yacco2::AST:: +crt_tree_of_1son(yacco2::AST&Parent,yacco2::AST&S1){ +yacco2::AST::join_pts(Parent,S1); +} + +void yacco2::AST:: +crt_tree_of_2sons(yacco2::AST&Parent,yacco2::AST&S1,yacco2::AST&S2){ +yacco2::AST::join_pts(Parent,S1); +yacco2::AST::join_sts(S1,S2); +} + +void yacco2::AST:: +crt_tree_of_3sons(yacco2::AST&Parent,yacco2::AST&S1,yacco2::AST&S2,yacco2::AST&S3){ +yacco2::AST::join_pts(Parent,S1); +yacco2::AST::join_sts(S1,S2); +yacco2::AST::join_sts(S2,S3); +} + +void yacco2::AST:: +crt_tree_of_4sons(yacco2::AST&Parent,yacco2::AST&S1,yacco2::AST&S2,yacco2::AST&S3 +,yacco2::AST&S4){ +yacco2::AST::join_pts(Parent,S1); +yacco2::AST::join_sts(S1,S2); +yacco2::AST::join_sts(S2,S3); +yacco2::AST::join_sts(S3,S4); +} + +void yacco2::AST:: +crt_tree_of_5sons(yacco2::AST&Parent,AST&S1,yacco2::AST&S2,yacco2::AST&S3, +yacco2::AST&S4,yacco2::AST&S5){ +yacco2::AST::join_pts(Parent,S1); +yacco2::AST::join_sts(S1,S2); +yacco2::AST::join_sts(S2,S3); +yacco2::AST::join_sts(S3,S4); +yacco2::AST::join_sts(S4,S5); +} + +void yacco2::AST:: +crt_tree_of_6sons(yacco2::AST&Parent,yacco2::AST&S1,yacco2::AST&S2,yacco2::AST&S3 +,yacco2::AST&S4,yacco2::AST&S5,yacco2::AST&S6){ +yacco2::AST::join_pts(Parent,S1); +yacco2::AST::join_sts(S1,S2); +yacco2::AST::join_sts(S2,S3); +yacco2::AST::join_sts(S3,S4); +yacco2::AST::join_sts(S4,S5); +yacco2::AST::join_sts(S5,S6); +} +void yacco2::AST:: +crt_tree_of_7sons(yacco2::AST&Parent,yacco2::AST&S1,yacco2::AST&S2,yacco2::AST&S3 +,yacco2::AST&S4,yacco2::AST&S5,yacco2::AST&S6,yacco2::AST&S7){ +yacco2::AST::join_pts(Parent,S1); +yacco2::AST::join_sts(S1,S2); +yacco2::AST::join_sts(S2,S3); +yacco2::AST::join_sts(S3,S4); +yacco2::AST::join_sts(S4,S5); +yacco2::AST::join_sts(S5,S6); +yacco2::AST::join_sts(S6,S7); +} +void yacco2::AST:: +crt_tree_of_8sons(yacco2::AST&Parent,yacco2::AST&S1,yacco2::AST&S2,yacco2::AST&S3 +,yacco2::AST&S4,yacco2::AST&S5,yacco2::AST&S6,yacco2::AST&S7,yacco2::AST&S8){ +yacco2::AST::join_pts(Parent,S1); +yacco2::AST::join_sts(S1,S2); +yacco2::AST::join_sts(S2,S3); +yacco2::AST::join_sts(S3,S4); +yacco2::AST::join_sts(S4,S5); +yacco2::AST::join_sts(S5,S6); +yacco2::AST::join_sts(S6,S7); +yacco2::AST::join_sts(S7,S8); +} +void yacco2::AST:: +crt_tree_of_9sons(yacco2::AST&Parent,yacco2::AST&S1,yacco2::AST&S2,yacco2::AST&S3 +,yacco2::AST&S4,yacco2::AST&S5,yacco2::AST&S6 +,yacco2::AST&S7,yacco2::AST&S8,yacco2::AST&S9){ +AST::join_pts(Parent,S1); +AST::join_sts(S1,S2); +AST::join_sts(S2,S3); +AST::join_sts(S3,S4); +AST::join_sts(S4,S5); +AST::join_sts(S5,S6); +AST::join_sts(S6,S7); +AST::join_sts(S7,S8); +AST::join_sts(S8,S9); +} + +/*:480*//*481:*/ +//#line 915 "/usr/local/yacco2/library/tree.w" + +yacco2::CAbs_lr1_sym*yacco2::AST:: +content(yacco2::AST&Node){ +return Node.obj_; +} + +/*:481*//*482:*/ +//#line 922 "/usr/local/yacco2/library/tree.w" + +void yacco2::AST:: +zero_1st_son(yacco2::AST&Node){ +Node.lt_= 0; +} + +/*:482*//*483:*/ +//#line 929 "/usr/local/yacco2/library/tree.w" + +void yacco2::AST:: +zero_2nd_son(yacco2::AST&Node){ +yacco2::AST*lt= Node.lt_; +if(lt==0){ + +yacco2::KCHARP msg= +"zero_2nd_son 2nd son's 1st son Node ptr is zero"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +lt->rt_= 0; +} +/*:483*//*484:*/ +//#line 943 "/usr/local/yacco2/library/tree.w" + +void yacco2::AST:: +zero_brother(yacco2::AST&Node){ +Node.rt_= 0; +} +/*:484*//*485:*/ +//#line 949 "/usr/local/yacco2/library/tree.w" + +void yacco2::AST:: +zero_content(yacco2::AST&Node){ +Node.obj_= 0; +} +/*:485*//*486:*/ +//#line 955 "/usr/local/yacco2/library/tree.w" + +void yacco2::AST:: +set_content(yacco2::AST&Node,yacco2::CAbs_lr1_sym&Sym){ +Node.obj_= &Sym; +} +/*:486*//*487:*/ +//#line 961 "/usr/local/yacco2/library/tree.w" + +void yacco2::AST:: +zero_previous(yacco2::AST&Node){ +Node.pr_= 0; +} +/*:487*//*488:*/ +//#line 967 "/usr/local/yacco2/library/tree.w" + +void yacco2::AST:: +set_content_wdelete(yacco2::AST&Node,yacco2::CAbs_lr1_sym&Sym){ +Node.obj_= &Sym; +Node.wdelete_= true; +} +/*:488*//*489:*/ +//#line 974 "/usr/local/yacco2/library/tree.w" + +void yacco2::AST:: +set_previous(yacco2::AST&Node,yacco2::AST&Previous_node){ +Node.pr_= &Previous_node; +} +/*:489*//*490:*/ +//#line 980 "/usr/local/yacco2/library/tree.w" + +bool yacco2::AST:: +wdelete(yacco2::AST&Node){ +return Node.wdelete_; +} +/*:490*//*491:*/ +//#line 986 "/usr/local/yacco2/library/tree.w" + +void yacco2::AST:: +wdelete(yacco2::AST&Node,bool Wdelete){ +Node.wdelete_= Wdelete; +} + +/*:491*//*492:*/ +//#line 993 "/usr/local/yacco2/library/tree.w" + +yacco2::AST*yacco2::AST:: +brother(yacco2::AST&Node){ +return Node.rt_; +} +/*:492*//*493:*/ +//#line 1005 "/usr/local/yacco2/library/tree.w" + +yacco2::AST*yacco2::AST:: +previous(yacco2::AST&Node){ +return Node.pr_; +} + +/*:493*//*494:*/ +//#line 1012 "/usr/local/yacco2/library/tree.w" + +yacco2::AST:: +AST():lt_(0),rt_(0),pr_(0),obj_(0),wdelete_(false){ +} + +yacco2::AST:: +AST(yacco2::CAbs_lr1_sym&Obj):lt_(0),rt_(0),pr_(0),obj_(&Obj),wdelete_(false){ +} + +yacco2::AST::~AST(){ +if(wdelete_==true){ +delete obj_; +} +} +/*:494*//*495:*/ +//#line 1027 "/usr/local/yacco2/library/tree.w" + +void +yacco2::AST:: +join_pts(yacco2::AST&Parent,yacco2::AST&Child){ +if(Parent.lt_!=0){ + +yacco2::KCHARP msg= +"join_pts Parent lt ptr not zero"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +if(&Parent==&Child){ + +yacco2::KCHARP msg= +"join_pts Parent and child nodes are the same"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +Parent.lt_= &Child; +Child.pr_= &Parent; +} +/*:495*//*496:*/ +//#line 1049 "/usr/local/yacco2/library/tree.w" + +void +yacco2::AST:: +join_sts(yacco2::AST&Elder_sibling,yacco2::AST&Younger_sibling){ +if(Elder_sibling.rt_!=0){ + +yacco2::KCHARP msg= +"join_sts Elder_sibling rt ptr not zero"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +if(&Elder_sibling==&Younger_sibling){ + +yacco2::KCHARP msg= +"join_sts Left and Right nodes are the same"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +Elder_sibling.rt_= &Younger_sibling; +Younger_sibling.pr_= &Elder_sibling; +} + +/*:496*//*497:*/ +//#line 1072 "/usr/local/yacco2/library/tree.w" + +void +yacco2::AST:: +ast_delete(yacco2::AST&Node,bool Due_to_abort){ +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"<<FILE_LINE<<std::endl; +} + +/*:389*/ +//#line 1077 "/usr/local/yacco2/library/tree.w" + +yacco2::lrclog<<"YACCO2_T__::ast_DELETE Node to be deleted*: "<<&Node +<<" Abort switch: "<<Due_to_abort<<__FILE__<<__LINE__<<std::endl; +/*390:*/ +//#line 3060 "/usr/local/yacco2/library/parser.w" + +if(yacco2::YACCO2_MU_TRACING__){ +yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl; +} +UNLOCK_MUTEX(yacco2::TRACE_MU); + +/*:390*/ +//#line 1080 "/usr/local/yacco2/library/tree.w" + +} +if(&Node==Node.lt_){ + +yacco2::KCHARP msg= +"ast_delete recursion to self Node"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +if(&Node==Node.rt_){ + +yacco2::KCHARP msg= +"ast_delete Right recursion to self Node"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +yacco2::CAbs_lr1_sym*sym= Node.obj_; +if(YACCO2_T__!=0){ +if(sym!=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"<<FILE_LINE<<std::endl; +} + +/*:389*/ +//#line 1099 "/usr/local/yacco2/library/tree.w" + +yacco2::lrclog<<"YACCO2_T__::ast_DELETE Node to be deleted*: "<<&Node +<<" sym*: "<<sym<<" id: "<<sym->id__<<__FILE__<<__LINE__<<std::endl; +/*390:*/ +//#line 3060 "/usr/local/yacco2/library/parser.w" + +if(yacco2::YACCO2_MU_TRACING__){ +yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl; +} +UNLOCK_MUTEX(yacco2::TRACE_MU); + +/*:390*/ +//#line 1102 "/usr/local/yacco2/library/tree.w" + +} +} +if(YACCO2_T__!=0){ +if(Node.lt_){ +/*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"<<FILE_LINE<<std::endl; +} + +/*:389*/ +//#line 1107 "/usr/local/yacco2/library/tree.w" + +yacco2::lrclog<<"YACCO2_T__::call ast_DELETE Node by LEFT node to be deleted*: "<<Node.lt_ +<<" by node*: "<<&Node<<__FILE__<<__LINE__<<std::endl; +/*390:*/ +//#line 3060 "/usr/local/yacco2/library/parser.w" + +if(yacco2::YACCO2_MU_TRACING__){ +yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl; +} +UNLOCK_MUTEX(yacco2::TRACE_MU); + +/*:390*/ +//#line 1110 "/usr/local/yacco2/library/tree.w" + +AST::ast_delete(*Node.lt_,Due_to_abort); +} +if(Node.rt_){ +/*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"<<FILE_LINE<<std::endl; +} + +/*:389*/ +//#line 1114 "/usr/local/yacco2/library/tree.w" + +yacco2::lrclog<<"call ast_DELETE Node by RIGHT node to be deleted*: "<<Node.rt_ +<<" by node*: "<<&Node<<__FILE__<<__LINE__<<std::endl; +/*390:*/ +//#line 3060 "/usr/local/yacco2/library/parser.w" + +if(yacco2::YACCO2_MU_TRACING__){ +yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl; +} +UNLOCK_MUTEX(yacco2::TRACE_MU); + +/*:390*/ +//#line 1117 "/usr/local/yacco2/library/tree.w" + +AST::ast_delete(*Node.rt_,Due_to_abort); +} +} +if(sym!=0){ + +if(Due_to_abort==true){ +if(sym->affected_by_abort()==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"<<FILE_LINE<<std::endl; +} + +/*:389*/ +//#line 1126 "/usr/local/yacco2/library/tree.w" + +yacco2::lrclog +<<"YACCO2_T__::ast_DELETE node's object deleted due to ABORT: " +<<sym->id__<<__FILE__<<__LINE__<<std::endl; +/*390:*/ +//#line 3060 "/usr/local/yacco2/library/parser.w" + +if(yacco2::YACCO2_MU_TRACING__){ +yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl; +} +UNLOCK_MUTEX(yacco2::TRACE_MU); + +/*:390*/ +//#line 1130 "/usr/local/yacco2/library/tree.w" + +} +delete sym; +Node.obj_= 0; +}; +}else{ +delete sym; +Node.obj_= 0; +} +} +delete&Node; +/*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"<<FILE_LINE<<std::endl; +} + +/*:389*/ +//#line 1141 "/usr/local/yacco2/library/tree.w" + +lrclog<<"ast_DELETE Node deleted*: "<<&Node<<__FILE__<<__LINE__<<std::endl; +/*390:*/ +//#line 3060 "/usr/local/yacco2/library/parser.w" + +if(yacco2::YACCO2_MU_TRACING__){ +yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl; +} +UNLOCK_MUTEX(yacco2::TRACE_MU); + +/*:390*/ +//#line 1143 "/usr/local/yacco2/library/tree.w" + +} + +/*:497*//*498:*/ +//#line 1147 "/usr/local/yacco2/library/tree.w" + +yacco2::AST*yacco2::AST:: +find_depth(AST&Node,yacco2::INT Enum){ +if(&Node==Node.lt_){ + +yacco2::KCHARP msg= +"find_depth Left recursion to self Node"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +if(&Node==Node.rt_){ + +yacco2::KCHARP msg= +"find_depth Right recursion to self Node"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +if(Node.obj_==0){ + +yacco2::KCHARP msg= +"find_depth Tree's oject is zero"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +yacco2::CAbs_lr1_sym*sym= Node.obj_; +if(sym->enumerated_id__==Enum)return&Node; +if(Node.lt_!=0){ +yacco2::AST*rtn= find_depth(*Node.lt_,Enum); +if(rtn!=0)return rtn; +} +if(Node.rt_!=0){ +yacco2::AST*rtn= find_depth(*Node.rt_,Enum); +if(rtn!=0)return rtn; +} +return 0; +} + +/*:498*//*499:*/ +//#line 1185 "/usr/local/yacco2/library/tree.w" + +yacco2::AST*yacco2::AST:: +find_breadth(yacco2::AST&Node,yacco2::INT Enum){ +if(&Node==Node.lt_){ + +yacco2::KCHARP msg= +"find_breadth Left recursion to self Node"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +if(&Node==Node.rt_){ + +yacco2::KCHARP msg= +"find_breadth Right recursion to self Node"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +if(Node.obj_==0){ + +yacco2::KCHARP msg= +"find_breadth Tree's object is zero"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +yacco2::CAbs_lr1_sym*sym= Node.obj_; +if(sym->enumerated_id__==Enum)return&Node; +if(Node.rt_!=0){ +yacco2::AST*rtn= find_breadth(*Node.rt_,Enum); +if(rtn!=0)return rtn; +} +return 0; +} + +/*:499*//*501:*/ +//#line 1223 "/usr/local/yacco2/library/tree.w" + +void yacco2::AST:: +relink(yacco2::AST&Previous,yacco2::AST&Old_to,yacco2::AST&New_to){ +if(&Previous==&Old_to){ + +yacco2::KCHARP msg= +"relink Previous ptr == Old ptr"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +if(&Previous==&New_to){ + +yacco2::KCHARP msg= +"relink Previous ptr == New ptr"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +if(&Old_to==&New_to){ + +yacco2::KCHARP msg= +"relink Old ptr == New ptr"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +if(Previous.rt_==&Old_to){ +Old_to.pr_= 0; +Previous.rt_= &New_to; +New_to.pr_= &Previous; +return; +} +Old_to.pr_= 0; +Previous.lt_= &New_to; +New_to.pr_= &Previous; +} + +/*:501*//*502:*/ +//#line 1263 "/usr/local/yacco2/library/tree.w" + +void yacco2::AST:: +relink_between(yacco2::AST&Previous,yacco2::AST&Old_to,yacco2::AST&New_to){ +if(&Previous==&Old_to){ + +yacco2::KCHARP msg= +"relink_between Previous ptr == Old ptr"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +if(&Previous==&New_to){ + +yacco2::KCHARP msg= +"relink_between Previous ptr == New ptr"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +if(&Old_to==&New_to){ + +yacco2::KCHARP msg= +"relink_between Old ptr == New ptr"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +if(Previous.rt_==&Old_to){ +Old_to.pr_= &New_to; +Previous.rt_= &New_to; +New_to.pr_= &Previous; +New_to.rt_= &Old_to; +return; +} +if(Previous.lt_==&Old_to){ +Old_to.pr_= &New_to; +Previous.lt_= &New_to; +New_to.pr_= &Previous; +New_to.rt_= &Old_to; +return; +} + +yacco2::KCHARP msg= +"ast_relink_between Previous node does not have lt or rt of Old"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +/*:502*//*503:*/ +//#line 1311 "/usr/local/yacco2/library/tree.w" + +void yacco2::AST:: +relink_after(yacco2::AST&Previous,yacco2::AST&To){ +if(&Previous==&To){ + +yacco2::KCHARP msg= "relink_after Previous ptr == To ptr"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +if(Previous.rt_==0){ +Previous.rt_= &To; +To.pr_= &Previous; +return; +} +AST*rt= Previous.rt_; +if(rt->pr_==&Previous){ +rt->pr_= &To; +Previous.rt_= &To; +To.pr_= &Previous; +To.rt_= rt; +return; +} + +yacco2::KCHARP msg= "relink_after Previous Node does not have lt or rt of Old"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} + +/*:503*//*504:*/ +//#line 1344 "/usr/local/yacco2/library/tree.w" + +void yacco2::AST:: +relink_before(yacco2::AST&Before,yacco2::AST&New_to){ +if(&Before==&New_to){ + +yacco2::KCHARP msg= +"relink_before Before ptr == New ptr"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +if(Before.pr_==0){ +Before.pr_= &New_to; +New_to.rt_= &Before; +return; +} +yacco2::AST*pr= Before.pr_; +if(pr->lt_==&Before){ +pr->lt_= &New_to; +New_to.pr_= pr; +New_to.rt_= &Before; +Before.pr_= &New_to; +return; +} +if(pr->rt_==&Before){ +pr->rt_= &New_to; +New_to.pr_= pr; +New_to.rt_= &Before; +Before.pr_= &New_to; +return; +} + +yacco2::KCHARP msg= +"relink_before Before node does not have lt or rt of Old"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} + +/*:504*//*505:*/ +//#line 1384 "/usr/local/yacco2/library/tree.w" + +void yacco2::AST:: +replace_node(yacco2::AST&Old,yacco2::AST&By){ +if(&Old==&By){ + +yacco2::KCHARP msg= +"replace_node Old ptr == By ptr"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +yacco2::AST*prev= Old.pr_; +yacco2::AST*rt= Old.rt_; +if(prev->rt_==&Old){ +prev->rt_= &By; +By.pr_= prev; +By.rt_= rt; +if(rt!=0)rt->pr_= &By; +Old.rt_= 0; +Old.pr_= 0; +return; +} +if(prev->lt_==&Old){ +prev->lt_= &By; +By.pr_= prev; +By.rt_= rt; +if(rt!=0)rt->pr_= &By; +Old.rt_= 0; +Old.pr_= 0; +return; +} +By.rt_= Old.rt_; +Old.rt_= 0; +} + + +/*:505*//*507:*/ +//#line 1424 "/usr/local/yacco2/library/tree.w" + +void yacco2::AST:: +add_son_to_tree(yacco2::AST&Parent,yacco2::AST&Son){ +AST*p_lt= Parent.lt_; +if(p_lt==0){ +Parent.lt_= &Son; +Son.pr_= &Parent; +return; +} +Parent.lt_= &Son; +Son.pr_= &Parent; +Son.rt_= p_lt; +p_lt->pr_= &Son; +} + +/*:507*//*508:*/ +//#line 1440 "/usr/local/yacco2/library/tree.w" + +yacco2::AST*yacco2::AST::add_child_at_end(yacco2::AST&Tree,yacco2::AST&Child){ +yacco2::AST*cur_youngest_child= AST::get_child_at_end(Tree); +if(cur_youngest_child==0){ +AST::join_pts(Tree,Child); +}else{ +AST::join_sts(*cur_youngest_child,Child); +} +return&Child; +} + +/*:508*//*509:*/ +//#line 1452 "/usr/local/yacco2/library/tree.w" + +yacco2::AST* +yacco2::AST::get_spec_child(yacco2::AST&Tree,yacco2::INT Cnt){ +if(Cnt<=0){ + +yacco2::KCHARP msg= +"get_spec_child Node Cnt is <= 0"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +yacco2::INT pos(0); +yacco2::AST*ct= Tree.lt_; +for(;ct!=0;ct= ct->rt_){ +++pos; +if(pos==Cnt)return ct; +} +return 0; +} + +/*:509*//*510:*/ +//#line 1472 "/usr/local/yacco2/library/tree.w" + +yacco2::AST*yacco2::AST:: +get_1st_son(yacco2::AST&Node){ +return get_spec_child(Node,1); +} + +yacco2::AST*yacco2::AST:: +get_2nd_son(yacco2::AST&Node){ +return get_spec_child(Node,2); +} +yacco2::AST*yacco2::AST:: +get_3rd_son(yacco2::AST&Node){ +return get_spec_child(Node,3); +} +yacco2::AST*yacco2::AST:: +get_4th_son(yacco2::AST&Node){ +return get_spec_child(Node,4); +} +yacco2::AST*yacco2::AST:: +get_5th_son(yacco2::AST&Node){ +return get_spec_child(Node,5); +} + +yacco2::AST*yacco2::AST::get_6th_son(yacco2::AST&Node){ +return get_spec_child(Node,6); +} + +yacco2::AST*yacco2::AST::get_7th_son(yacco2::AST&Node){ +return get_spec_child(Node,7); +} + +yacco2::AST*yacco2::AST::get_8th_son(yacco2::AST&Node){ +return get_spec_child(Node,8); +} + +yacco2::AST*yacco2::AST::get_9th_son(yacco2::AST&Node){ +return get_spec_child(Node,9); +} + + +/*:510*//*511:*/ +//#line 1514 "/usr/local/yacco2/library/tree.w" + +yacco2::AST*yacco2::AST::get_child_at_end(yacco2::AST&Tree){ +yacco2::AST*ct= Tree.lt_; +yacco2::AST*pct(0); +for(;ct!=0;ct= ct->rt_){ +pct= ct; +} +return pct; +} + +/*:511*//*512:*/ +//#line 1527 "/usr/local/yacco2/library/tree.w" + +yacco2::AST*yacco2::AST::get_youngest_sibling(yacco2::AST&Tree){ +yacco2::AST*start= &Tree; +yacco2::AST*younger_sibling= start; +for(;younger_sibling!=0;){ +if(younger_sibling->rt_==0)break; +younger_sibling= younger_sibling->rt_; +} +if(start==younger_sibling)return 0; +return younger_sibling; +} + +/*:512*//*513:*/ +//#line 1541 "/usr/local/yacco2/library/tree.w" + +yacco2::AST*yacco2::AST::get_younger_sibling(yacco2::AST&Child,yacco2::INT Pos){ +if(Pos<=0){ + +yacco2::KCHARP msg= +"get_younger_sibling Pos <= 0"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +int cnt(0); +yacco2::AST*younger_sibling= Child.rt_; +for(;younger_sibling!=0;younger_sibling= younger_sibling->rt_){ +++cnt; +if(cnt==Pos)return younger_sibling; +} +return 0; +} + +/*:513*//*514:*/ +//#line 1562 "/usr/local/yacco2/library/tree.w" + +yacco2::AST*yacco2::AST::get_older_sibling(yacco2::AST&Child,yacco2::INT Pos){ +if(Pos>=0){ + +yacco2::KCHARP msg= +"get_older_sibling Pos >= 0"; +Yacco2_faulty_precondition(msg,__FILE__,__LINE__); +exit(1); +} +int cnt(0); +AST*older_sibling= Child.pr_; +for(;older_sibling!=0;older_sibling= older_sibling->pr_){ +--cnt; +if(cnt==Pos)return older_sibling; +} +return 0; +} +/*:514*//*515:*/ +//#line 1580 "/usr/local/yacco2/library/tree.w" + +yacco2::AST*yacco2::AST::get_parent(yacco2::AST&Tree){ +yacco2::AST*cnode= &Tree; +yacco2::AST*older_sibling= cnode->pr_; +for(;older_sibling!=0;cnode= older_sibling,older_sibling= cnode->pr_){ +if(older_sibling->rt_!=cnode)return older_sibling; +} +return 0; +} + +/*:515*//*516:*/ +//#line 1591 "/usr/local/yacco2/library/tree.w" + +yacco2::AST*yacco2::AST::common_ancestor +(yacco2::Type_AST_ancestor_list&ListA,yacco2::Type_AST_ancestor_list&ListB){ +Type_AST_ancestor_list*a; +Type_AST_ancestor_list*b; +if(ListA.size()<ListB.size()){ +a= &ListA; +b= &ListB; +}else{ +b= &ListA; +a= &ListB; +} +Type_AST_ancestor_list::iterator ai= a->begin(); +Type_AST_ancestor_list::iterator aie= a->end(); +Type_AST_ancestor_list::iterator bi; +Type_AST_ancestor_list::iterator bie; +for(;ai!=aie;++ai){ +bi= b->begin(); +bie= b->end(); +for(;bi!=bie;++bi){ +AST*A= *ai; +AST*B= *bi; +if(A==B) +return A; +} +} +return 0; +} + +/*:516*//*517:*/ +//#line 1622 "/usr/local/yacco2/library/tree.w" + +yacco2::AST* +yacco2::AST::divorce_node_from_tree(yacco2::AST&Node){ +yacco2::AST*bpr= Node.pr_; +yacco2::AST*brt= Node.rt_; +/*524:*/ +//#line 1690 "/usr/local/yacco2/library/tree.w" + +Node.pr_= 0; +Node.rt_= 0; + +/*:524*/ +//#line 1627 "/usr/local/yacco2/library/tree.w" + +/*518:*/ +//#line 1644 "/usr/local/yacco2/library/tree.w" + +if(bpr==0)goto forest; +if(bpr->rt_==&Node)goto amongst_brothers; +if(bpr->lt_==&Node)goto parental_guidance; + +/*:518*/ +//#line 1628 "/usr/local/yacco2/library/tree.w" + + +forest: +/*522:*/ +//#line 1675 "/usr/local/yacco2/library/tree.w" + +if(brt==0)return 0; +brt->pr_= 0; +return brt; + +/*:522*/ +//#line 1631 "/usr/local/yacco2/library/tree.w" + +amongst_brothers: +/*523:*/ +//#line 1684 "/usr/local/yacco2/library/tree.w" + +bpr->rt_= brt; +if(brt!=0)brt->pr_= bpr; +return brt; + +/*:523*/ +//#line 1633 "/usr/local/yacco2/library/tree.w" + +parental_guidance: +/*519:*/ +//#line 1654 "/usr/local/yacco2/library/tree.w" + +/*520:*/ +//#line 1659 "/usr/local/yacco2/library/tree.w" + +if(brt==0){ +bpr->lt_= 0; +return 0; +} + +/*:520*/ +//#line 1655 "/usr/local/yacco2/library/tree.w" + +/*521:*/ +//#line 1666 "/usr/local/yacco2/library/tree.w" + +bpr->lt_= brt; +brt->pr_= bpr; +return brt; + +/*:521*/ +//#line 1656 "/usr/local/yacco2/library/tree.w" + + +/*:519*/ +//#line 1635 "/usr/local/yacco2/library/tree.w" + +} + +/*:517*//*525:*/ +//#line 1705 "/usr/local/yacco2/library/tree.w" + +yacco2::AST* +yacco2::AST::clone_tree +(yacco2::AST&Node_to_copy,yacco2::AST*Calling_node +,yacco2::ast_base_stack::n_action Relation){ +yacco2::AST*new_t= new yacco2::AST(*yacco2::AST::content(Node_to_copy)); +switch(Relation){ +case ast_base_stack::init:break; +case ast_base_stack::left:{ +if(Calling_node!=0){ +AST::join_pts(*Calling_node,*new_t); +} +break; +} +case ast_base_stack::right:{ +if(Calling_node!=0){ +AST::join_sts(*Calling_node,*new_t); +} +break; +} +} +if(Node_to_copy.lt_!=0) +AST::clone_tree(*Node_to_copy.lt_,new_t,ast_base_stack::left); +if(Node_to_copy.rt_!=0) +AST::clone_tree(*Node_to_copy.rt_,new_t,ast_base_stack::right); +return new_t; +} + +/*:525*//*534:*/ +//#line 1844 "/usr/local/yacco2/library/tree.w" + +yacco2::functor_result_type +yacco2::remove_unwanted_ast_functor::operator()(yacco2::ast_base_stack*Stk_env){ +stk_env_= Stk_env; +srec_= stk_env_->cur_stk_rec_; +idx_= stk_env_->idx_; +cnode_= srec_->node_; + +yacco2::CAbs_lr1_sym*sobj= AST::content(*cnode_); +if(sobj==0)return accept_node; +if(sobj->tok_co_ords__.external_file_id__<=1)return accept_node; + +idx_= stk_env_->idx_; +if(stk_env_->idx_==0){ +return accept_node; +} +return bypass_node; +} + +void yacco2::remove_unwanted_ast_functor::possible_delete(){ +yacco2::INT pidx= idx_-1; +if(pidx<0)return; +ast_base_stack::s_rec*psrec= stk_env_->stk_rec(pidx); +yacco2::AST*psnode= psrec->node_; +yacco2::AST*srt= AST::brother(*cnode_); +switch(psrec->act_){ +case ast_base_stack::left:{ +if(srt!=0){ +yacco2::AST::relink(*psnode,*cnode_,*srt); +srec_->node_= srt; +srec_->act_= ast_base_stack::init; +return; +} +yacco2::AST::zero_1st_son(*psnode); +srec_->act_= ast_base_stack::eoc; +return; +} +case ast_base_stack::right:{ +if(srt!=0){ +yacco2::AST::relink(*psnode,*cnode_,*srt); +srec_->node_= srt; +srec_->act_= ast_base_stack::init; +return; +} +yacco2::AST::zero_brother(*psnode); +srec_->act_= ast_base_stack::eoc; +return; +} +default:{ +return; +} +} +} + +yacco2::remove_unwanted_ast_functor::~remove_unwanted_ast_functor(){ +} + + +/*:534*//*535:*/ +//#line 1903 "/usr/local/yacco2/library/tree.w" + +yacco2::functor_result_type +yacco2::insert_back_recycled_items_functor::operator()(yacco2::ast_base_stack*Stk_env){ +stk_env_= Stk_env; +srec_= stk_env_->cur_stk_rec_; +idx_= stk_env_->idx_; +cnode_= srec_->node_; + +yacco2::CAbs_lr1_sym*top_node_sym= AST::content(*cnode_); +yacco2::CAbs_lr1_sym*node_sym= AST::content(*insert_node_); +if(node_sym->tok_co_ords__.rc_pos__<=top_node_sym->tok_co_ords__.rc_pos__) +return accept_node; +return bypass_node; +} + +void yacco2::insert_back_recycled_items_functor::insert_node +(yacco2::AST&Inode){insert_node_= &Inode;} +yacco2::AST*yacco2::insert_back_recycled_items_functor::new_root(){return new_root_;} + +void yacco2::insert_back_recycled_items_functor::insert_before(){ +if(stk_env_->idx_> 0)goto overlay; +root_change: +new_root_= insert_node_; + +overlay: + +srec_->node_= insert_node_; +srec_->act_= ast_base_stack::right; +AST::join_sts(*insert_node_,*cnode_); + +stk_env_->push(*cnode_,ast_base_stack::visit); +adj_prev_caller: +if(stk_env_->idx_==0)return; +yacco2::INT pi= idx_-1; +yacco2::ast_base_stack::s_rec*pcur_rec= stk_env_->stk_rec(pi); +yacco2::AST*pnode= pcur_rec->node_; +switch(pcur_rec->act_){ +case yacco2::ast_base_stack::left:{ +yacco2::AST::zero_1st_son(*pnode); +yacco2::AST::join_pts(*pnode,*insert_node_); +return; +} +case yacco2::ast_base_stack::right:{ +yacco2::AST::zero_brother(*pnode); +yacco2::AST::join_sts(*pnode,*insert_node_); +return; +} +} +return; +} + + +/*:535*//*536:*/ +//#line 1956 "/usr/local/yacco2/library/tree.w" + +yacco2::functor_result_type +yacco2::tok_can_ast_functor::operator()(ast_base_stack*Stk_env){ +return accept_node; +} + +/*:536*//*537:*/ +//#line 1963 "/usr/local/yacco2/library/tree.w" + +yacco2::functor_result_type +yacco2::tok_can_ast_no_stop_functor::operator()(ast_base_stack*Stk_env){ +return stop_walking; +} + +/*:537*//*538:*/ +//#line 1970 "/usr/local/yacco2/library/tree.w" + +yacco2::functor_result_type +yacco2::tok_can_ast_bypass_functor::operator()(ast_base_stack*Stk_env){ +yacco2::ast_base_stack::s_rec*srec= Stk_env->cur_stk_rec_; +yacco2::AST*cnode= srec->node_; +yacco2::CAbs_lr1_sym*sym= AST::content(*cnode); +if(sym->tok_co_ords__.external_file_id__> 1) +return bypass_node; +return bypass_node; +} + +/*:538*//*539:*/ +//#line 1982 "/usr/local/yacco2/library/tree.w" + +yacco2::functor_result_type +yacco2::prt_ast_functor::operator()(yacco2::ast_base_stack*Stk_env){ +stk_env_= Stk_env; +srec_= stk_env_->cur_stk_rec_; +idx_= stk_env_->idx_; +yacco2::INT pidx= idx_-1; +cnode_= srec_->node_; + +if(pidx<=0)goto prt_prefix; +{ +ast_base_stack::s_rec*psrec= stk_env_->stk_rec(pidx); +if(psrec->act_==ast_base_stack::left){ +how_[0]= 'l'; +}else{ +how_[0]= 'r'; +} +how_[1]= 't'; +how_[2]= (char)0; +} +prt_prefix: +/*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"<<FILE_LINE<<std::endl; +} + +/*:389*/ +//#line 2003 "/usr/local/yacco2/library/tree.w" + +yacco2::INT no_lt(0); +for(yacco2::INT x= 0;x<=idx_;++x) +if(stk_env_->stk_rec(x)->act_==ast_base_stack::left)++no_lt; +for(yacco2::INT x= 0;x<=no_lt;++x)(*ofile_)<<" "; +(*ofile_)<<++cnt_<<"::"<<' '; +/*390:*/ +//#line 3060 "/usr/local/yacco2/library/parser.w" + +if(yacco2::YACCO2_MU_TRACING__){ +yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl; +} +UNLOCK_MUTEX(yacco2::TRACE_MU); + +/*:390*/ +//#line 2009 "/usr/local/yacco2/library/tree.w" + +call_prt_func: +(*prt_funct_)(cnode_); +return accept_node; +} + +yacco2::prt_ast_functor::prt_ast_functor(PF Func,std::ofstream*Ofile):prt_funct_(Func),cnt_(0){ +if(Ofile==0){ +ofile_= &yacco2::lrclog; +}else{ +ofile_= Ofile; +} +} + +void yacco2::prt_ast_functor::reset_cnt(){ +cnt_= 0; +} + +/*:539*//*540:*/ +//#line 2028 "/usr/local/yacco2/library/tree.w" + +yacco2::functor_result_type +yacco2::fire_a_func_ast_functor::operator()(yacco2::ast_base_stack*Stk_env){ +stk_env_= Stk_env; +srec_= stk_env_->cur_stk_rec_; +idx_= stk_env_->idx_; +yacco2::INT pidx= idx_-1; +cnode_= srec_->node_; +call_prt_func: +(*a_funct_)(cnode_); +return accept_node; +} + +yacco2::fire_a_func_ast_functor::fire_a_func_ast_functor(PF Func):a_funct_(Func){} + +/*:540*//*541:*/ +//#line 2044 "/usr/local/yacco2/library/tree.w" + +yacco2::functor_result_type +yacco2::str_ast_functor::operator()(yacco2::ast_base_stack*Stk_env){ +stk_env_= Stk_env; +srec_= stk_env_->cur_stk_rec_; +idx_= stk_env_->idx_; +yacco2::INT pidx= idx_-1; +cnode_= srec_->node_; + +if(pidx<=0)goto prt_prefix; +{ +ast_base_stack::s_rec*psrec= stk_env_->stk_rec(pidx); +if(psrec->act_==ast_base_stack::left){ +how_[0]= 'l'; +}else{ +how_[0]= 'r'; +} +how_[1]= 't'; +how_[2]= (char)0; +} +prt_prefix: +call_prt_func: +(*prt_funct_)(cnode_,this); +return accept_node; +} + +yacco2::str_ast_functor::str_ast_functor(PF Func):prt_funct_(Func){source_str_.clear();} + +//#line 1 "/usr/local/yacco2/library/constraints.w" + + + + + + + +/*:541*/ +//#line 238 "/usr/local/yacco2/library/tree.w" + + +/*:450*/ |