// Replace (t1 - t2) by (t1 + (-1) * t2) const FOBDDTerm* rewriteBinaryMinus(const FOBDDFuncTerm *& functerm) { auto plus = get(STDFUNC::ADDITION); plus = plus->disambiguate(functerm->func()->sorts(), NULL); Assert(plus!=NULL); auto rhs = functerm->args(1); auto minusoneterm = _manager->getDomainTerm(rhs->sort(), createDomElem(-1)); auto times = get(STDFUNC::PRODUCT); times = times->disambiguate(std::vector<Sort*>(3, rhs->sort()), NULL); auto newprodterm = _manager->getFuncTerm(times, { minusoneterm, rhs }); auto newterm = _manager->getFuncTerm(plus, { functerm->args(0), newprodterm }); return newterm->acceptchange(this); }
vector<DisambiguatedData> Disambiguator::Disambiguate( const vector<Token>& tokens) { vector<PredisambiguatedData> predisambiguated = featureCalculator->CalculateFeatures(tokens); return disambiguate(predisambiguated); }
// Replace -t by (-1)*t const FOBDDTerm* rewriteUnaryMinus(const FOBDDFuncTerm *& functerm) { auto minusoneterm = _manager->getDomainTerm(functerm->args(0)->sort(), createDomElem(-1)); auto times = get(STDFUNC::PRODUCT); times = times->disambiguate(std::vector<Sort*>(3, functerm->args(0)->sort()), NULL); auto newterm = _manager->getFuncTerm(times, { minusoneterm, functerm->args(0) }); return newterm->acceptchange(this); }
void do_write( string file, string buf ) { string fname = DIR + file + ".hlp"; string skill = file; int dot; rm(fname); write_file( fname, buf ); // check for aliases that need making while( (dot = member(file,'.')) != -1 ) file = file[dot+1..]; if( file != skill ) { string tmp, alias = "!"+DIR+skill; fname = DIR + file + ".hlp"; if( !sizeof(get_dir(fname)) ) write_file( fname, alias ); else { tmp = read_file(fname); if( tmp && tmp != alias ) { rm(fname); write_file( fname, disambiguate(file) ); } } } }