void PlumedMain::readInputWords(const std::vector<std::string> & words) { plumed_assert(initialized); if(words.empty())return; else if(words[0]=="ENDPLUMED") return; else if(words[0]=="_SET_SUFFIX") { plumed_assert(words.size()==2); setSuffix(words[1]); } else { std::vector<std::string> interpreted(words); Tools::interpretLabel(interpreted); Action* action=actionRegister().create(ActionOptions(*this,interpreted)); if(!action) { log<<"ERROR\n"; log<<"I cannot understand line:"; for(unsigned i=0; i<interpreted.size(); ++i) log<<" "<<interpreted[i]; log<<"\n"; log.flush(); plumed_merror("I cannot understand line " + interpreted[0] + " " + interpreted[1]); }; action->checkRead(); actionSet.push_back(action); }; pilots=actionSet.select<ActionPilot*>(); }
precedence * mk_precedence(ast_manager & m, order_params const & params) { if (params.m_order_precedence_gen.empty()) return mk_default_precedence(m, params); symbol user("user"); symbol definition("definition"); symbol interpreted("interpreted"); symbol frequency("frequency"); symbol arity("arity"); symbol arbitrary("arbitrary"); symbol inv("-"); ptr_buffer<precedence> ps; svector<symbol>::const_iterator it = params.m_order_precedence_gen.begin(); svector<symbol>::const_iterator end = params.m_order_precedence_gen.end(); bool prev_inv = false; for (; it != end; ++it) { symbol curr = *it; if (curr == user) { if (params.m_order_precedence.empty()) ps.push_back(mk_inv_precedence(prev_inv, alloc(user_precedence, m, params.m_order_precedence.size(), params.m_order_precedence.c_ptr()))); } else if (curr == definition) { warning_msg("definition precedence was not implement yet."); } else if (curr == interpreted) { ps.push_back(mk_inv_precedence(prev_inv, alloc(interpreted_precedence))); } else if (curr == frequency) { warning_msg("frequency precedence was not implement yet."); } else if (curr == arity) { ps.push_back(mk_inv_precedence(prev_inv, alloc(arity_precedence))); } else if (curr == arbitrary) { ps.push_back(mk_inv_precedence(prev_inv, alloc(arbitrary_precedence))); // it is pointless to continue, arbitrary_precedence is a total order return mk_lex_precedence(ps); } else if (curr == inv) { prev_inv = true; } else { warning_msg("invalid precedence generator: ignoring atom '%s'.", curr.bare_str()); } } return mk_lex_precedence(ps); }