Exemplo n.º 1
0
bool
operator != (const VT & vta, const VT & vtb)
{
  ST sta (vta.begin (), vta.end ());
  ST stb (vtb.begin (), vtb.end ());
  return (sta != stb);
}
Exemplo n.º 2
0
Arquivo: wsi.cpp Projeto: smly/sandbox
/* show labels */
void debug_labels (VT tokens, map<string,int> labels) {
  cout << endl << "  <===--- AVAILABLE LABELS ---===>" << endl << endl;

  VT::iterator tok;
  for (tok = tokens.begin(); tok != tokens.end(); tok++) {
    if ( tok->get_id() == CAAP ) {
      labels[ tok->get_param() ] = tok->get_pos();
      cout << "L" << tok->get_pos()
           << " = " << tok->get_param() << endl;
    }
  }
}
Exemplo n.º 3
0
Arquivo: wsi.cpp Projeto: smly/sandbox
/* debug print as genome sequence */
void debug_print_as_genome(VT tokens) {
  cout << endl << "  <===--- DEBUG PRINT AS GENOME SEQUENCE ---===>" << endl << endl;

  int linemanip = 0;
  VT::iterator tok;

  for (tok=tokens.begin(); tok != tokens.end(); tok++) {
    int id = tok->get_id();
    cout << (char)(id + 'a');
    linemanip++;
    if (linemanip%40==0) cout << endl;
  }

  cout << endl;
}
Exemplo n.º 4
0
VT LCS(VT& A, VT& B)
{
  VVI dp;
  int n = A.size(), m = B.size();
  dp.resize(n+1);
  for(int i=0; i<=n; i++) dp[i].resize(m+1, 0);
  
  for(int i=1; i<=n; i++)
    for(int j=1; j<=m; j++)
    {
      if(A[i-1] == B[j-1]) dp[i][j] = dp[i-1][j-1]+1;
      else dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
    }
    
  VT res;
  backtrack(dp, res, A, B, n, m);
  reverse(res.begin(), res.end());
  return res;
}
Exemplo n.º 5
0
Arquivo: wsi.cpp Projeto: smly/sandbox
void debug_print(VT tokens, map<string,int> marks) {
  cout << endl << "  <===--- ASSEMBLY LIKE PSEUDO CODE ---===>" << endl << endl;

  VT::iterator tok;
  for (tok=tokens.begin(); tok != tokens.end(); tok++) {
    int pos = tok->get_pos();
    string param = tok->get_param();

    cout << setw(4) << setfill('0') << pos << ": ";

    switch (tok->get_id()) {
    case AAP:  cout << "AAP\tpush\t" << param << "(" << numerise(param) << ")" << endl; break;
    case ACA:  cout << "ACA\t" << "dul\t" << endl; break;
    case ACB:  cout << "ACB\t" << endl; break;
    case ACC:  cout << "ACC\t" << "pop\t" << endl; break;
    case BBA:  cout << "BBA\t" << "store" << endl; break;
    case BBB:  cout << "BBB\t" << "retri" << endl; break;
    case BAAA: cout << "BAAA\t" << "add" << endl; break;
    case BAAB: cout << "BAAB\t" << "sub" << endl; break;
    case BAAC: cout << "BAAC\t" << endl; break;
    case BABA: cout << "BABA\t" << endl; break;
    case BABB: cout << "BABB\t" << endl; break;
    case CAAP: cout << "CAAP\t" << "label\tL" << marks[param] << endl; break;
    case CABP: cout << "CABP\t" << "call\tL" << marks[param] << endl; break;
    case CACP: cout << "CACP\t" << "jump\tL" << marks[param] << endl; break;
    case CBAP: cout << "CBAP\t" << "jmpz\tL" << marks[param] << endl; break;
    case CBBP: cout << "CBBP\t" << param << endl; break;
    case CBC:  cout << "CBC\t" << "ret" << endl; break;
    case CCC:  cout << "CCC\t" << "exit" << endl; break;
    case BCAA: cout << "BCAA" << "\t" << "puchr" << endl; break;
    case BCAB: cout << "BCAB\t" << endl; break;
    case BCBA: cout << "BCBA\t" << "rechr" << endl; break;
    case BCBB: cout << "BCBB\t" << endl; break;
    }
  }
}
Exemplo n.º 6
0
Arquivo: wsi.cpp Projeto: smly/sandbox
/* interprete */
void interprete (VT tokens, map<string, int> labels) {
  stack<int> st, pst;
  map<int,int> heap;

  VT::iterator tok;
  for (tok=tokens.begin(); tok != tokens.end(); tok++) {
    // print_token(tok, st, pst, heap);
    int ppos = tok->get_pos();

    int left, right, tmp, jumpto;
    map<int, int>::iterator mit;
    VT::iterator t;
    switch(tok->get_id()) {
    case PUSH: st.push( numerise( tok->get_param() ) ); break;
    case DUPL: st.push( st.top() ); break;
    case SWAP:
      left  = st.top(); st.pop();
      right = st.top(); st.pop();
      st.push(left); st.push(right); break;
    case POPL: st.pop(); break;
    case ADDB:
      right = st.top(); st.pop();
      left = st.top(); st.pop();
      st.push(left + right); break;
    case SUBB:
      right = st.top(); st.pop();
      left = st.top(); st.pop();
      st.push(left - right); break;
    case MULB:
      right = st.top(); st.pop();
      left = st.top(); st.pop();
      st.push(left * right); break;
    case DIVB:
      right = st.top(); st.pop();
      left = st.top(); st.pop();
      st.push((int)(left / right)); break;
    case MODB:
      right = st.top(); st.pop();
      left = st.top(); st.pop();
      st.push(left % right); break;
    case STOR:
      left = st.top(); st.pop();
       right = st.top(); st.pop();
      heap[ right ] = left; break;
    case RETR:
      tmp = st.top(); st.pop();
      mit = heap.find( tmp );
      if (mit != heap.end()) st.push( mit->second );
      else st.push( 0 ); break;
    case SETL: break;
    case CALL:
      pst.push( ppos );
      jumpto = labels[ tok->get_param() ];

      for (t=tokens.begin(); t != tokens.end(); t++) {
        if (t->get_pos() == jumpto) { break; }
      }
      tok = t;
      break;
    case JUMP:
      jumpto = labels[ tok->get_param() ];

      for (t=tokens.begin(); t != tokens.end(); t++) {
        if (t->get_pos() == jumpto) { break; }
      }
      tok = t;
      break;
    case JMPZ:
      tmp = st.top(); st.pop();
      jumpto = labels[ tok->get_param() ];

      if (tmp==0) {

        for (t=tokens.begin(); t != tokens.end(); t++) {
          if (t->get_pos() == jumpto) { break; }
        }
        tok = t;
      }
      break;
    case JMPN:
      tmp = st.top(); st.pop();
      jumpto = labels[ tok->get_param() ];

      if (tmp < 0) {

        for (t=tokens.begin(); t != tokens.end(); t++) {
          if (t->get_pos() == jumpto) { break; }
        }
        tok = t;
      }
      break;
    case RETC:
      ppos = pst.top(); pst.pop();

      for (t=tokens.begin(); t != tokens.end(); t++) {
        if (t->get_pos() == ppos) { break; }
      }
      tok = t;
      break;
    case ENDC: exit(0); break;
    case PCHR:
      tmp = st.top(); st.pop();
      cout << (char)tmp; break;
    case PNUM:
      tmp = st.top(); st.pop();
      cout << tmp; break;
    case RCHR:
      tmp = (int)getchar();
      heap[ st.top() ] = tmp;
      st.pop(); break;
    case RNUM:
      cin >> tmp;
      heap[ st.top() ] = tmp;
      st.pop(); break;
    }

    /* parse err. some exception here */
  }
}