您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ ASTVec类代码示例

51自学网 2021-06-03 12:04:19
  C++
这篇教程C++ ASTVec类代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中ASTVec的典型用法代码示例。如果您正苦于以下问题:C++ ASTVec类的具体用法?C++ ASTVec怎么用?C++ ASTVec使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。

在下文中一共展示了ASTVec类的28个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: CreateSimpXor

 ASTNode STPMgr::CreateSimpXor(const ASTNode& form1, const ASTNode& form2) {   ASTVec children;   children.push_back(form1);   children.push_back(form2);   return CreateSimpXor(children); }
开发者ID:DidwardFrenkel,项目名称:stp,代码行数:7,


示例2: searchTerm

bool PropagateEqualities::searchTerm(const ASTNode& lhs, const ASTNode& rhs){  const unsigned width = lhs.GetValueWidth();  if (lhs == rhs)    return true;  if (lhs.GetKind() == SYMBOL)    return simp->UpdateSubstitutionMap(lhs, rhs); // checks whether it's been                                                  // solved for, or if the RHS                                                  // contains the LHS.  if (lhs.GetKind() == BVUMINUS)    return searchTerm(lhs[0], nf->CreateTerm(BVUMINUS, width, rhs));  if (lhs.GetKind() == BVNEG)    return searchTerm(lhs[0], nf->CreateTerm(BVNEG, width, rhs));  if (lhs.GetKind() == BVXOR || lhs.GetKind() == BVPLUS)    for (size_t i = 0; i < lhs.Degree(); i++)    {      ASTVec others;      for (size_t j = 0; j < lhs.Degree(); j++)        if (j != i)          others.push_back(lhs[j]);      ASTNode new_rhs;      if (lhs.GetKind() == BVXOR)      {        others.push_back(rhs);        assert(others.size() > 1);        new_rhs = nf->CreateTerm(lhs.GetKind(), width, others);      }      else if (lhs.GetKind() == BVPLUS)      {        if (others.size() > 1)          new_rhs = nf->CreateTerm(BVPLUS, width, others);        else          new_rhs = others[0];        new_rhs = nf->CreateTerm(BVUMINUS, width, new_rhs);        new_rhs = nf->CreateTerm(BVPLUS, width, new_rhs, rhs);      }      else        FatalError("sdafasfsdf2q3234423");      bool result = searchTerm(lhs[i], new_rhs);      if (result)        return true;    }  if (lhs.Degree() == 2 && lhs.GetKind() == BVMULT && lhs[0].isConstant() &&      simp->BVConstIsOdd(lhs[0]))    return searchTerm(lhs[1],                      nf->CreateTerm(BVMULT, width,                                     simp->MultiplicativeInverse(lhs[0]), rhs));  return false;}
开发者ID:cambridgehackers,项目名称:stp,代码行数:59,


示例3: if

  // Does some simple caching of prior results.  void  Cpp_interface::checkSat(const ASTVec & assertionsSMT2)  {    if (ignoreCheckSatRequest)      return;    bm.GetRunTimes()->stop(RunTimes::Parsing);    checkInvariant();    assert(assertionsSMT2.size() == cache.size());    Entry& last_run = cache.back();    if ((last_run.node_number != assertionsSMT2.back().GetNodeNum()) && (last_run.result == SOLVER_SATISFIABLE))      {        // extra asserts might have been added to it,        // flipping from sat to unsat. But never from unsat to sat.        last_run.result =  SOLVER_UNDECIDED;      }    // We might have run this query before, or it might already be shown to be unsat. If it was sat,    // we've stored the result (but not the model), so we can shortcut and return what we know.    if (!((last_run.result == SOLVER_SATISFIABLE) || last_run.result == SOLVER_UNSATISFIABLE))        {          resetSolver();          ASTNode query;          if (assertionsSMT2.size() > 1)            query = nf->CreateNode(AND, assertionsSMT2);          else if (assertionsSMT2.size() == 1)            query = assertionsSMT2[0];          else            query = bm.ASTTrue;          SOLVER_RETURN_TYPE last_result = GlobalSTP->TopLevelSTP(query, bm.ASTFalse);          // Store away the answer. Might be timeout, or error though..          last_run = Entry(last_result);          last_run.node_number = assertionsSMT2.back().GetNodeNum();          // It's satisfiable, so everything beneath it is satisfiable too.          if (last_result == SOLVER_SATISFIABLE)            {              for (int i = 0; i < cache.size(); i++)                {                  assert(cache[i].result != SOLVER_UNSATISFIABLE);                  cache[i].result = SOLVER_SATISFIABLE;                }            }        }    if (bm.UserFlags.quick_statistics_flag)      {        bm.GetRunTimes()->print();      }    (GlobalSTP->tosat)->PrintOutput(last_run.result);    bm.GetRunTimes()->start(RunTimes::Parsing);  }
开发者ID:Sjlver,项目名称:stp,代码行数:60,


示例4: CreateSimpAndOr

 ASTNode STPMgr::CreateSimpAndOr(bool IsAnd,                                  const ASTNode& form1, const ASTNode& form2) {   ASTVec children;   children.push_back(form1);   children.push_back(form2);   return CreateSimpAndOr(IsAnd, children); }
开发者ID:DidwardFrenkel,项目名称:stp,代码行数:8,


示例5: CreateSimpForm

 ASTNode STPMgr::CreateSimpForm(Kind kind, const ASTNode& child0) {   ASTVec children;   //child_stack.clear();      // could just reset top pointer.   children.push_back(child0);   //child_stack.push_back(child0);   return CreateSimpForm(kind, children);   //return CreateSimpForm(kind, child_stack); }
开发者ID:DidwardFrenkel,项目名称:stp,代码行数:9,


示例6: checkChildrenAreBV

  void checkChildrenAreBV(const ASTVec& v, const ASTNode&n) {	for (ASTVec::const_iterator it = v.begin(), itend = v.end(); it != itend; it++)		if (BITVECTOR_TYPE != it->GetType()) {			cerr << "The type is: " << it->GetType() << endl;			FatalError(					"BVTypeCheck:ChildNodes of bitvector-terms must be bitvectors/n",					n);		}}
开发者ID:chubbymaggie,项目名称:Tac-Symbolic-Executor,代码行数:9,


示例7: CreateNode

ASTNode NodeFactory::CreateNode(Kind kind, const ASTNode& child0,                                const ASTVec & back_children){    ASTVec front_children;    front_children.reserve(1 + back_children.size());    front_children.push_back(child0);    front_children.insert(front_children.end(), back_children.begin(),                          back_children.end());    return CreateNode(kind, front_children);}
开发者ID:khooyp,项目名称:stp,代码行数:10,


示例8: GetAsserts

void STPMgr::printAssertsToStream(ostream& os){  ASTVec v = GetAsserts();  for (ASTVec::iterator i = v.begin(), iend = v.end(); i != iend; i++)  {    ASTNode q = *i;    os << "ASSERT( ";    q.PL_Print(os, this);    os << ");" << endl;  }}
开发者ID:stp,项目名称:stp,代码行数:11,


示例9: GetAsserts

 void STPMgr::printAssertsToStream(ostream &os, int simplify_print) {   ASTVec v = GetAsserts();   for(ASTVec::iterator i=v.begin(),iend=v.end();i!=iend;i++) {     //Begin_RemoveWrites = true; ASTNode q = (simplify_print == 1) ?     //SimplifyFormula_TopLevel(*i,false) : *i; q = (simplify_print     //== 1) ? SimplifyFormula_TopLevel(q,false) : q;     ASTNode q = *i;     //Begin_RemoveWrites = false;     os << "ASSERT( ";     q.PL_Print(os);     os << ");" << endl;   } }
开发者ID:0bliv10n,项目名称:s2e,代码行数:13,


示例10: CreateArrayTerm

ASTNode NodeFactory::CreateArrayTerm(Kind kind, unsigned int index, unsigned int width,                                     const ASTNode& child0, const ASTNode& child1, const ASTNode& child2,                                     const ASTVec &children){    ASTVec child;    child.reserve(children.size() + 3);    child.push_back(child0);    child.push_back(child1);    child.push_back(child2);    child.insert(child.end(), children.begin(), children.end());    return CreateArrayTerm(kind, index, width, child);}
开发者ID:khooyp,项目名称:stp,代码行数:12,


示例11: FlattenKind

 void FlattenKind(const Kind k, const ASTVec &children, ASTVec & flat_children) {   ASTVec::const_iterator ch_end = children.end();   for (ASTVec::const_iterator it = children.begin(); it != ch_end; it++)     {       Kind ck = it->GetKind();       if (k == ck)         {           FlattenKind(k,it->GetChildren(), flat_children);         }       else         {           flat_children.push_back(*it);         }     } }
开发者ID:chubbymaggie,项目名称:Tac-Symbolic-Executor,代码行数:16,


示例12: print_STPInput_Back

  void print_STPInput_Back(const ASTNode& query) {	  // Determine the symbols in the query and asserts.	  ASTNodeSet visited;	  ASTNodeSet symbols;	  buildListOfSymbols(query,  visited, symbols);      ASTVec v = (BEEV::GlobalSTP->bm)->GetAsserts();      for(ASTVec::iterator i=v.begin(),iend=v.end();i!=iend;i++)    	buildListOfSymbols(*i,  visited, symbols);	(BEEV::GlobalSTP->bm)->printVarDeclsToStream(cout, symbols);    (BEEV::GlobalSTP->bm)->printAssertsToStream(cout,0);    cout << "QUERY(";    query.PL_Print(cout);    cout << ");/n";  } //end of print_STPInput_Back()
开发者ID:0bliv10n,项目名称:s2e,代码行数:16,


示例13: searchXOR

bool PropagateEqualities::searchXOR(const ASTNode& lhs, const ASTNode& rhs){  Kind k = lhs.GetKind();  if (lhs == rhs)    return true;  if (k == SYMBOL)    return simp->UpdateSubstitutionMap(        lhs, rhs); // checks whether it's been solved for or loops.  if (k == NOT)    return searchXOR(lhs[0], nf->CreateNode(NOT, rhs));  bool result = false;  if (k == XOR)    for (size_t i = 0; i < lhs.Degree(); i++)    {      ASTVec others;      for (size_t j = 0; j < lhs.Degree(); j++)        if (j != i)          others.push_back(lhs[j]);      others.push_back(rhs);      assert(others.size() > 1);      ASTNode new_rhs = nf->CreateNode(XOR, others);      result = searchXOR(lhs[i], new_rhs);      if (result)        return result;    }  if (k == EQ && lhs[0].GetValueWidth() == 1)  {    bool result =        searchTerm(lhs[0], nf->CreateTerm(ITE, 1, rhs, lhs[1],                                          nf->CreateTerm(BVNEG, 1, lhs[1])));    if (!result)      result =          searchTerm(lhs[1], nf->CreateTerm(ITE, 1, rhs, lhs[0],                                            nf->CreateTerm(BVNEG, 1, lhs[0])));  }  return result;}
开发者ID:cambridgehackers,项目名称:stp,代码行数:46,


示例14: Dot_Print1

  void Dot_Print1(ostream &os, const ASTNode n, hash_set<int> *alreadyOutput)  {    // check if this node has already been printed. If so return.    if (alreadyOutput->find(n.GetNodeNum()) != alreadyOutput->end())      return;    alreadyOutput->insert(n.GetNodeNum());    os << "n" << n.GetNodeNum() << "[label =/"";    switch (n.GetKind())      {      case SYMBOL:        n.nodeprint(os);        break;      case BITVECTOR:      case BVCONST:        outputBitVec(n, os);        break;      default:        os << _kind_names[n.GetKind()];      }    os << "/"];" << endl;    // print the edges to each child.    ASTVec ch = n.GetChildren();    ASTVec::iterator itend = ch.end();    int i = 0;    for (ASTVec::iterator it = ch.begin(); it < itend; it++)      {        os << "n" << n.GetNodeNum()            << " -> " << "n"            << it->GetNodeNum()            << "[label=" << i++            << "];" << endl;      }    // print each of the children.    for (ASTVec::iterator it = ch.begin(); it < itend; it++)      {        Dot_Print1(os, *it, alreadyOutput);      }  }
开发者ID:AmesianX,项目名称:stp,代码行数:46,


示例15: FlattenKindNoDuplicates

/* Maintains a set of nodes that have already been seen. So that deeply shared * AND,OR operations are not * flattened multiple times. */void FlattenKindNoDuplicates(const Kind k, const ASTVec& children,                             ASTVec& flat_children,                             ASTNodeSet& alreadyFlattened){  const ASTVec::const_iterator ch_end = children.end();  for (ASTVec::const_iterator it = children.begin(); it != ch_end; it++)  {    const Kind ck = it->GetKind();    if (k == ck)    {      if (alreadyFlattened.find(*it) == alreadyFlattened.end())      {        alreadyFlattened.insert(*it);        FlattenKindNoDuplicates(k, it->GetChildren(), flat_children,                                alreadyFlattened);      }    }    else    {      flat_children.push_back(*it);    }  }}
开发者ID:cambridgehackers,项目名称:stp,代码行数:27,


示例16: FlattenKind

  // Flatten (k ... (k ci cj) ...) to (k ... ci cj ...)  // This is local to this file.  ASTVec FlattenKind(Kind k, const ASTVec &children)  {    ASTVec flat_children;    ASTVec::const_iterator ch_end = children.end();    for (ASTVec::const_iterator it = children.begin(); it != ch_end; it++)      {        Kind ck = it->GetKind();        const ASTVec &gchildren = it->GetChildren();        if (k == ck)          {            // append grandchildren to children            flat_children.insert(flat_children.end(),                                 gchildren.begin(), gchildren.end());          }        else          {            flat_children.push_back(*it);          }      }    return flat_children;  }
开发者ID:Esail,项目名称:CourseProject,代码行数:25,


示例17: assert

  /* The most complicated handling is for EXTRACTS. If a variable has parents that * are all extracts and each of those extracts is disjoint (i.e. reads different bits) * Then each of the extracts are replaced by a fresh variable. This is the only case * where a variable with multiple distinct parents is replaced by a fresh variable. * + We perform this check upfront, so will miss any extra cases the the unconstrained *   variable elimination introduces. * + It's all or nothing. So even if there's an extract of [0:2] [1:2] and [3:5], we wont *   replace the [3:5] (even though it could be). */  void  RemoveUnconstrained::splitExtractOnly(vector<MutableASTNode*> extracts)  {    assert(extracts.size() >0);    // Going to be rebuilt later anyway, so discard.    vector<MutableASTNode*> variables;    for (int i =0; i <extracts.size(); i++)      {        ASTNode& var = extracts[i]->n;        assert(var.GetKind() == SYMBOL);        const int size = var.GetValueWidth();        std::vector<ASTNode> toVar(size);        // Create a mutable copy that we can iterate over.        vector <MutableASTNode*> mut;        mut.insert(mut.end(), extracts[i]->parents.begin(), extracts[i]->parents.end());        for (vector<MutableASTNode*>::iterator it = mut.begin(); it != mut.end(); it++)          {            ASTNode parent_node = (*it)->n;            assert(((**it)).children[0] == extracts[i]);            assert(!parent_node.IsNull());            assert(parent_node.GetKind() == BVEXTRACT);            int lb = parent_node[2].GetUnsignedConst();            // Replace each parent with a fresh.            toVar[lb] = replaceParentWithFresh(**it,variables);          }      ASTVec concatVec;      int empty =0;      for (int j=0; j < size;j++)      {          if (toVar[j].IsNull())            {              empty++;              continue;            }          if (empty > 0)            {              concatVec.push_back(bm.CreateFreshVariable(0, empty, "extract_unc"));              empty = 0;            }          concatVec.push_back(toVar[j]);          //cout << toVar[j];          assert(toVar[j].GetValueWidth() > 0);          j+=toVar[j].GetValueWidth()-1;        }      if (empty> 0)        {          concatVec.push_back(bm.CreateFreshVariable(0, empty, "extract_unc"));        }    ASTNode concat = concatVec[0];    for (int i=1; i < concatVec.size();i++)      {          assert(!concat.IsNull());          concat = bm.CreateTerm(BVCONCAT, concat.GetValueWidth() + concatVec[i].GetValueWidth(),concatVec[i], concat);      }    replace(var,concat);        }  }
开发者ID:arsenm,项目名称:stp,代码行数:77,


示例18: splitExtractOnly

  ASTNode  RemoveUnconstrained::topLevel_other(const ASTNode &n, Simplifier *simplifier)  {    if (n.GetKind() == SYMBOL)      return n; // top level is an unconstrained symbol/.    simplifier_convenient = simplifier;    ASTNodeSet noCheck; // We don't want to check some expensive nodes over and over again.    vector<MutableASTNode*> variable_array;    MutableASTNode* topMutable = MutableASTNode::build(n);    vector<MutableASTNode*> extracts;    topMutable->getDisjointExtractVariables(extracts);    if (extracts.size() > 0)      {          splitExtractOnly(extracts);      }    topMutable->getAllUnconstrainedVariables(variable_array);    for (int i =0; i < variable_array.size() ; i++)      {        // Don't make this is a reference. If the vector gets resized, it will point to        // memory that no longer contains the object.        MutableASTNode& muteNode = *variable_array[i];        const ASTNode var = muteNode.n;        assert(var.GetKind() == SYMBOL);        if (!muteNode.isUnconstrained())          continue;        MutableASTNode& muteParent = muteNode.getParent();        if (noCheck.find(muteParent.n) != noCheck.end())          {            continue;          }        vector <MutableASTNode*> mutable_children = muteParent.children;        //nb. The children might be dirty. i.e. not have substitutions written through them yet.        ASTVec children;        children.reserve(mutable_children.size());        for (int j = 0; j <mutable_children.size(); j++ )          children.push_back(mutable_children[j]->n);        const size_t numberOfChildren = children.size();        const Kind kind = muteNode.getParent().n.GetKind();        unsigned width = muteNode.getParent().n.GetValueWidth();        unsigned indexWidth = muteNode.getParent().n.GetIndexWidth();        ASTNode other;        MutableASTNode* muteOther;          if(numberOfChildren == 2)          {            if (children[0] != var)              {                other = children[0];                muteOther = mutable_children[0];              }            else              {                other = children[1];                muteOther = mutable_children[1];              }            if (kind != AND && kind != OR && kind != BVOR && kind != BVAND)              if (other == var)                continue; // Most rules don't like duplicate variables.          }        else          {            if (kind != AND && kind != OR && kind != BVOR && kind != BVAND)              {                  int found = 0;                  for (int i = 0; i < numberOfChildren; i++)                    {                      if (children[i] == var)                        found++;                   }                    if (found != 1)                      continue; // Most rules don't like duplicate variables.              }          }          /*          cout << i << " " << kind << " " << variable_array.size() <<  " " << mutable_children.size() << endl;          cout << "children[0]" << children[0] << endl;          cout << "children[1]" << children[1] << endl;          cout << muteParent.n << endl;           *///.........这里部分代码省略.........
开发者ID:arsenm,项目名称:stp,代码行数:101,


示例19: assert

ASTNode ArrayTransformer::TransformTerm(const ASTNode& term){  assert(TransformMap != NULL);  const Kind k = term.GetKind();  if (!is_Term_kind(k))    FatalError("TransformTerm: Illegal kind: You have input a nonterm:", term,               k);  ASTNodeMap::const_iterator iter;  if ((iter = TransformMap->find(term)) != TransformMap->end())    return iter->second;  ASTNode result;  switch (k)  {    case SYMBOL:    case BVCONST:    {      result = term;      break;    }    case WRITE:      FatalError("TransformTerm: this kind is not supported", term);      break;    case READ:      result = TransformArrayRead(term);      break;    case ITE:    {      ASTNode cond = term[0];      ASTNode thn = term[1];      ASTNode els = term[2];      cond = TransformFormula(cond);      if (ASTTrue == cond)        result = TransformTerm(thn);      else if (ASTFalse == cond)        result = TransformTerm(els);      else      {        thn = TransformTerm(thn);        els = TransformTerm(els);        if (bm->UserFlags.optimize_flag)          result = simp->CreateSimplifiedTermITE(cond, thn, els);        else          result = nf->CreateTerm(ITE, thn.GetValueWidth(), cond, thn, els);      }      assert(result.GetIndexWidth() == term.GetIndexWidth());      break;    }    default:    {      const ASTVec& c = term.GetChildren();      ASTVec::const_iterator it = c.begin();      ASTVec::const_iterator itend = c.end();      const unsigned width = term.GetValueWidth();      const unsigned indexwidth = term.GetIndexWidth();      ASTVec o;      o.reserve(c.size());      for (; it != itend; it++)      {        o.push_back(TransformTerm(*it));      }      if (c != o)      {        result = nf->CreateArrayTerm(k, indexwidth, width, o);      }      else        result = term;    }    break;  }  if (term.Degree() > 0)    (*TransformMap)[term] = result;  if (term.GetValueWidth() != result.GetValueWidth())    FatalError("TransformTerm: "               "result and input terms are of different length",               result);  if (term.GetIndexWidth() != result.GetIndexWidth())  {    std::cerr << "TransformTerm: input term is : " << term << std::endl;    FatalError("TransformTerm: "               "result & input terms have different index length",               result);  }  return result;} 
开发者ID:jamella,项目名称:stp,代码行数:88,


示例20: main

int main(int argc, char** argv){    extern int smt2parse();    extern int smt2lex_destroy(void);    extern FILE* smt2in;    STPMgr stp;    STPMgr* mgr = &stp;    Cpp_interface interface(*mgr, mgr->defaultNodeFactory);    interface.startup();    interface.ignoreCheckSat();    stp::GlobalParserInterface = &interface;    Simplifier* simp = new Simplifier(mgr);    ArrayTransformer* at = new ArrayTransformer(mgr, simp);    AbsRefine_CounterExample* abs = new AbsRefine_CounterExample(mgr, simp, at);    ToSATAIG* tosat = new ToSATAIG(mgr, at);    GlobalSTP = new STP(mgr, simp, at, tosat, abs);    srand(time(NULL));    stp::GlobalParserBM = &stp;    stp.UserFlags.disableSimplifications();    stp.UserFlags.bitConstantProp_flag = true;    // Parse SMTLIB2-----------------------------------------    mgr->GetRunTimes()->start(RunTimes::Parsing);    if (argc > 1)    {        smt2in = fopen(argv[1], "r");        smt2parse();    }    else    {        smt2in = NULL; // from stdin.        smt2parse();    }    smt2lex_destroy();    //-----------------------------------------------------    ASTNode n;    ASTVec v = interface.GetAsserts();    if (v.size() > 1)        n = interface.CreateNode(AND, v);    else        n = v[0];    // Apply cbitp ----------------------------------------    simplifier::constantBitP::ConstantBitPropagation cb(        simp, mgr->defaultNodeFactory, n);    if (cb.isUnsatisfiable())        n = mgr->ASTFalse;    else        n = cb.topLevelBothWays(n, true, true);    if (simp->hasUnappliedSubstitutions())    {        n = simp->applySubstitutionMap(n);        simp->haveAppliedSubstitutionMap();    }    // Print back out.    printer::SMTLIB2_PrintBack(cout, n);    cout << "(check-sat)/n";    cout << "(exit)/n";    return 0;}
开发者ID:jjsahalf,项目名称:stp,代码行数:70,


示例21: UserGuided_AbsRefine

  //UserGuided abstraction refinement  SOLVER_RETURN_TYPE  STP::  UserGuided_AbsRefine(SATSolver& NewSolver,		       const ASTNode& original_input)  {    ASTVec v = bm->GetAsserts_WithKey(0);    if(v.empty())      {	FatalError("UserGuided_AbsRefine: Something is seriously wrong."/		   "The input set is empty");      }    ASTNode sureAddInput =       (v.size() == 1) ? v[0] : bm->CreateNode(AND, v);     SOLVER_RETURN_TYPE res = SOLVER_UNDECIDED;    res = TopLevelSTPAux(NewSolver, sureAddInput, original_input);    if(SOLVER_UNDECIDED != res)      {	return res;      }        //Do refinement here    if(AND != original_input.GetKind())      {	FatalError("UserGuided_AbsRefine: The input must be an AND");      }    ASTVec RefineFormulasVec;    ASTVec RemainingFormulasVec;    ASTNode asttrue = bm->CreateNode(TRUE);    ASTNode astfalse = bm->CreateNode(FALSE);    for(int count=0; count < bm->UserFlags.num_absrefine; count++)      {	RemainingFormulasVec.clear();	RemainingFormulasVec.push_back(asttrue);	RefineFormulasVec.clear();		RefineFormulasVec.push_back(asttrue);	ASTVec InputKids = original_input.GetChildren();	for(ASTVec::iterator it = InputKids.begin(), itend = InputKids.end();	    it!=itend;it++)	  {	    Ctr_Example->ClearComputeFormulaMap();	    if(astfalse == Ctr_Example->ComputeFormulaUsingModel(*it))	      {		RefineFormulasVec.push_back(*it);	      }	    else	      {		RemainingFormulasVec.push_back(*it);	      }	  }	ASTNode RefineFormulas =	  (RefineFormulasVec.size() == 1) ?	  RefineFormulasVec[0] : bm->CreateNode(AND, RefineFormulasVec);	res = TopLevelSTPAux(NewSolver, RefineFormulas, original_input);	if(SOLVER_UNDECIDED != res)	  {	    return res;	  }      }    ASTNode RemainingFormulas =       (RemainingFormulasVec.size() == 1) ?      RemainingFormulasVec[0] : bm->CreateNode(AND, RemainingFormulasVec);    res = TopLevelSTPAux(NewSolver, RemainingFormulas, original_input);        if(SOLVER_UNDECIDED != res)      {	return res;      }        FatalError("TopLevelSTPAux: reached the end without proper conclusion:"	       "either a divide by zero in the input or a bug in STP");        return SOLVER_ERROR;  } //End of UserGuided_AbsRefine()
开发者ID:DidwardFrenkel,项目名称:stp,代码行数:76,


示例22: if

  // FIXME:  How do I know whether ITE is a formula or not?  ASTNode STPMgr::CreateSimpFormITE(const ASTNode& child0,                                     const ASTNode& child1,                                     const ASTNode& child2)  {    ASTNode retval;    if (_trace_simpbool)      {        cout << "========" << endl              << "CreateSimpFormITE "              << child0 << child1 << child2 << endl;      }    if (ASTTrue == child0)      {        retval = child1;      }    else if (ASTFalse == child0)      {        retval = child2;      }    else if (child1 == child2)      {        retval = child1;      }    // ITE(x, TRUE, y ) == x OR y    else if (ASTTrue == child1)      {        retval = CreateSimpAndOr(0, child0, child2);      }    // ITE(x, FALSE, y ) == (!x AND y)    else if (ASTFalse == child1)      {        retval = CreateSimpAndOr(1, CreateSimpNot(child0), child2);      }    // ITE(x, y, TRUE ) == (!x OR y)    else if (ASTTrue == child2)      {        retval = CreateSimpAndOr(0, CreateSimpNot(child0), child1);      }    // ITE(x, y, FALSE ) == (x AND y)    else if (ASTFalse == child2)      {        retval = CreateSimpAndOr(1, child0, child1);      }    else      {	ASTNode left  = CreateNode(AND, child0, child1);	ASTNode right = CreateNode(AND, CreateNode(NOT,child0), child2);	ASTVec c;	c.push_back(left);	c.push_back(right);        retval = CreateSimpXor(c);      }    if (_trace_simpbool)      {        cout << "returns " << retval << endl;      }    return retval;  }
开发者ID:DidwardFrenkel,项目名称:stp,代码行数:64,


示例23: lpvec

  // Constant children are accumulated in "accumconst".  ASTNode STPMgr::CreateSimpXor(ASTVec &children)  {    if (_trace_simpbool)      {        cout << "========" << endl << "CreateSimpXor ";        lpvec(children);        cout << endl;      }    ASTVec flat_children; // empty vector    ASTVec::const_iterator it_end = children.end();    if (UserFlags.xor_flatten_flag)      {        flat_children = FlattenKind(XOR, children);      }    else      {        flat_children = children;      }    // sort so that identical nodes occur in sequential runs, followed by    // their negations.    SortByExprNum(flat_children);    ASTNode retval;    // This is the C Boolean value of all constant args seen.  It is initially    // 0.  TRUE children cause it to change value.    bool accumconst = 0;    ASTVec new_children;    it_end = flat_children.end();    ASTVec::iterator next_it;    for (ASTVec::iterator it = flat_children.begin(); it != it_end; it++)      {        next_it = it + 1;        bool nextexists = (next_it < it_end);        if (ASTTrue == *it)          {            accumconst = !accumconst;          }        else if (ASTFalse == *it)          {            // Ignore it          }        else if (nextexists && (*next_it == *it))          {            // x XOR x = FALSE.  Skip current, write "false" into next_it            // so that it gets tossed, too.            *next_it = ASTFalse;          }        else if (nextexists && (next_it->GetKind() == NOT)                  && ((*next_it)[0] == *it))          {            // x XOR NOT x = TRUE.  Skip current, write "true" into next_it            // so that it gets tossed, too.            *next_it = ASTTrue;          }        else if (NOT == it->GetKind())          {            // If child is (NOT alpha), we can flip accumconst and use alpha.            // This is ok because (NOT alpha) == TRUE XOR alpha            accumconst = !accumconst;            // CreateSimpNot just takes child of not.            new_children.push_back(CreateSimpNot(*it));          }        else          {            new_children.push_back(*it);          }      }    // Children should be non-constant.    if (new_children.size() < 2)      {        if (0 == new_children.size())          {            // XOR(TRUE, FALSE) -- accumconst will be 1.            if (accumconst)              {                retval = ASTTrue;              }            else              {                retval = ASTFalse;              }          }        else          {            // there is just one child            // XOR(x, TRUE) -- accumconst will be 1.            if (accumconst)              {                retval = CreateSimpNot(new_children[0]);              }//.........这里部分代码省略.........
开发者ID:DidwardFrenkel,项目名称:stp,代码行数:101,


示例24: SortByArith

 void SortByArith(ASTVec& v) {   sort(v.begin(), v.end(), arithless); }
开发者ID:chubbymaggie,项目名称:Tac-Symbolic-Executor,代码行数:4,


示例25: SortByExprNum

 void SortByExprNum(ASTVec& v) {   sort(v.begin(), v.end(), exprless); }
开发者ID:chubbymaggie,项目名称:Tac-Symbolic-Executor,代码行数:4,


示例26: main

int main(int argc, char** argv){    // Register the error handler    vc_error_hdlr = errorHandler;#if  !defined(__MINGW32__) && !defined(__MINGW64__) && !defined( _MSC_VER)    // Grab some memory from the OS upfront to reduce system time when    // individual hash tables are being allocated    if (sbrk(INITIAL_MEMORY_PREALLOCATION_SIZE) == ((void*) - 1)) {        FatalError("Initial allocation of memory failed.");    }#endif /* !defined(__MINGW32__) && !defined(__MINGW64__) && !defined( _MSC_VER) */    bm = new STPMgr();    toClose = NULL;    auto_ptr<SimplifyingNodeFactory> simplifyingNF( new SimplifyingNodeFactory(*bm->hashingNodeFactory, *bm));    bm->defaultNodeFactory = simplifyingNF.get();    // The simplified keeps a pointer to whatever is set as the default node factory.    Simplifier* simp  = new Simplifier(bm);    auto_ptr<Simplifier> simpCleaner(simp);    ArrayTransformer* arrayTransformer = new ArrayTransformer(bm, simp);    auto_ptr<ArrayTransformer> atClearner(arrayTransformer);    ToSAT* tosat = new ToSAT(bm);    auto_ptr<ToSAT> tosatCleaner(tosat);    AbsRefine_CounterExample* Ctr_Example = new AbsRefine_CounterExample(bm, simp, arrayTransformer);    auto_ptr<AbsRefine_CounterExample> ctrCleaner(Ctr_Example);    create_options();    int ret = parse_options(argc, argv);    if (ret != 0) {        return ret;    }    GlobalSTP = new STP(bm, simp, arrayTransformer, tosat, Ctr_Example);    // If we're not reading the file from stdin.    if (!infile.empty()) {        read_file();    }    //want to print the output always from the commandline.    bm->UserFlags.print_output_flag = true;    ASTVec* AssertsQuery = new ASTVec;    bm->GetRunTimes()->start(RunTimes::Parsing);    parse_file(AssertsQuery);    bm->GetRunTimes()->stop(RunTimes::Parsing);    /*  The SMTLIB2 has a command language. The parser calls all the functions,     *  so when we get to here the parser has already called "exit". i.e. if the     *  language is smt2 then all the work has already been done, and all we need     *  to do is cleanup...     *    */    if (!bm->UserFlags.smtlib2_parser_flag) {        if (((ASTVec*) AssertsQuery)->empty()) {            FatalError("Input is Empty. Please enter some asserts and query/n");        }        if (((ASTVec*) AssertsQuery)->size() != 2) {            FatalError("Input must contain a query/n");        }        ASTNode asserts = (*(ASTVec*) AssertsQuery)[0];        ASTNode query = (*(ASTVec*) AssertsQuery)[1];        if (onePrintBack) {            print_back(query, asserts);            return 0;        }        SOLVER_RETURN_TYPE ret = GlobalSTP->TopLevelSTP(asserts, query);        if (bm->UserFlags.quick_statistics_flag) {            bm->GetRunTimes()->print();        }        (GlobalSTP->tosat)->PrintOutput(ret);        asserts = ASTNode();        query = ASTNode();    }    //Without cleanup    if (bm->UserFlags.isSet("fast-exit", "1")) {        exit(0);    }    //Propery tidy up    AssertsQuery->clear();    delete AssertsQuery;    _empty_ASTVec.clear();    simpCleaner.release();    atClearner.release();//.........这里部分代码省略.........
开发者ID:AmesianX,项目名称:stp,代码行数:101,


示例27: if

// This doesn't rewrite changes through properly so needs to have a substitution// applied to its output.ASTNode PropagateEqualities::propagate(const ASTNode& a, ArrayTransformer* at){  ASTNode output;  // if the variable has been solved for, then simply return it  if (simp->InsideSubstitutionMap(a, output))    return output;  if (!alreadyVisited.insert(a.GetNodeNum()).second)  {    return a;  }  output = a;  // traverse a and populate the SubstitutionMap  const Kind k = a.GetKind();  if (SYMBOL == k && BOOLEAN_TYPE == a.GetType())  {    bool updated = simp->UpdateSubstitutionMap(a, ASTTrue);    output = updated ? ASTTrue : a;  }  else if (NOT == k)  {    bool updated = searchXOR(a[0], ASTFalse);    output = updated ? ASTTrue : a;  }  else if (IFF == k || EQ == k)  {    const ASTVec& c = a.GetChildren();    if (c[0] == c[1])      return ASTTrue;    bool updated = simp->UpdateSubstitutionMap(c[0], c[1]);    if (updated)    {      // fill the arrayname readindices vector if e0 is a      // READ(Arr,index) and index is a BVCONST      int to;      if ((to = TermOrder(c[0], c[1])) == 1 && c[0].GetKind() == READ)        at->FillUp_ArrReadIndex_Vec(c[0], c[1]);      else if (to == -1 && c[1].GetKind() == READ)        at->FillUp_ArrReadIndex_Vec(c[1], c[0]);    }    if (!updated)      updated = searchTerm(c[0], c[1]);    if (!updated)      updated = searchTerm(c[1], c[0]);    output = updated ? ASTTrue : a;  }  else if (XOR == k)  {    bool updated = searchXOR(a, ASTTrue);    output = updated ? ASTTrue : a;    if (updated)      return output;// The below block should be subsumed by the searchXOR function which// generalises it.// So the below block should never do anything..#ifndef NDEBUG    if (a.Degree() != 2)      return output;    int to = TermOrder(a[0], a[1]);    if (0 == to)    {      if (a[0].GetKind() == NOT && a[0][0].GetKind() == EQ &&          a[0][0][0].GetValueWidth() == 1 && a[0][0][1].GetKind() == SYMBOL)      {        // (XOR (NOT(= (1 v)))  ... )        const ASTNode& symbol = a[0][0][1];        const ASTNode newN = nf->CreateTerm(            ITE, 1, a[1], a[0][0][0], nf->CreateTerm(BVNEG, 1, a[0][0][0]));        if (simp->UpdateSolverMap(symbol, newN))        {          assert(false);          output = ASTTrue;        }      }      else if (a[1].GetKind() == NOT && a[1][0].GetKind() == EQ &&               a[1][0][0].GetValueWidth() == 1 &&               a[1][0][1].GetKind() == SYMBOL)      {        const ASTNode& symbol = a[1][0][1];        const ASTNode newN = nf->CreateTerm(            ITE, 1, a[0], a[1][0][0], nf->CreateTerm(BVNEG, 1, a[1][0][0]));        if (simp->UpdateSolverMap(symbol, newN))        {          assert(false);          output = ASTTrue;//.........这里部分代码省略.........
开发者ID:cambridgehackers,项目名称:stp,代码行数:101,


示例28: GDL_Print1

void GDL_Print1(ostream& os, const ASTNode& n, hash_set<int>* alreadyOutput,                string (*annotate)(const ASTNode&)){  // check if this node has already been printed. If so return.  if (alreadyOutput->find(n.GetNodeNum()) != alreadyOutput->end())    return;  alreadyOutput->insert(n.GetNodeNum());  os << "node: { title:/"n" << n.GetNodeNum() << "/" label: /"";  switch (n.GetKind())  {    case SYMBOL:      n.nodeprint(os);      break;    case BITVECTOR:    case BVCONST:      outputBitVec(n, os);      break;    default:      os << _kind_names[n.GetKind()];  }  os << annotate(n);  os << "/"}" << endl;  // print the edges to each child.  const ASTVec ch = n.GetChildren();  const ASTVec::const_iterator itend = ch.end();  // If a node has the child 'TRUE' twice, we only want to output one TRUE node.  ASTNodeSet constantOutput;  int i = 0;  for (ASTVec::const_iterator it = ch.begin(); it < itend; it++)  {    std::stringstream label;    if (!isCommutative(n.GetKind()))      label << " label:/"" << i << "/"";    if (it->isConstant())    {      std::stringstream ss;      ss << n.GetNodeNum() << "_" << it->GetNodeNum();      if (constantOutput.end() == constantOutput.find(*it))      {        os << "node: { title:/"n";        os << ss.str() << "/" label: /"";        if (it->GetType() == BEEV::BOOLEAN_TYPE)          os << _kind_names[it->GetKind()];        else          outputBitVec(*it, os);        os << "/"}" << endl;        constantOutput.insert(*it);      }      os << "edge: { source:/"n" << n.GetNodeNum() << "/" target: /""         << "n" << ss.str() << "/"" << label.str() << "}" << endl;    }    else      os << "edge: { source:/"n" << n.GetNodeNum() << "/" target: /""         << "n" << it->GetNodeNum() << "/"" << label.str() << "}" << endl;    i++;  }  // print each of the children.  for (ASTVec::const_iterator it = ch.begin(); it < itend; it++)  {    if (!it->isConstant())      GDL_Print1(os, *it, alreadyOutput, annotate);  }}
开发者ID:delcypher,项目名称:stp,代码行数:77,



注:本文中的ASTVec类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ ASTVisitor类代码示例
C++ ASTUnit类代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。