summaryrefslogtreecommitdiff
path: root/web/yacco2/library/wtree.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'web/yacco2/library/wtree.cpp')
-rw-r--r--web/yacco2/library/wtree.cpp2602
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*/