node* _build_syntax_tree( list & output ) { while ( output.size()>1 ) { list::iterator i = output.begin(), i1 = output.begin() ; while (i != output.end()) { if ((*i)->operation && (*i)->priority > (*i1)->priority) i1 = i ; ++i ; } switch ((*i1)->operation->type) { case function::PREFIX : { (*i1)->priority = -1 ; i=i1; ++i; (*i1)->kaire = *i ; output.erase(i) ; break ; } case function::INFIX : { node* n = *i1 ; i=i1; ++i; --i1; n->priority = -1 ; n->kaire = *i1 ; n->desne = *i ; output.erase(i1) ; output.erase( find(output.begin(), output.end(), n->desne )) ; break ; } } } return *output.begin(); }