コード例 #1
0
ファイル: test_token.cpp プロジェクト: zhangpc123/coolang
TEST(scanner, token) {
    StringTable table;
    Pos start(1, 1);
    Pos end(2, 2);

    // test for bool literal token
    auto boolToken = Token::makeBoolLiteral(true, start, end);
    EXPECT_EQ(true, boolToken.getBoolValue());
    EXPECT_EQ(TK_BOOL_CONST, boolToken.getTokenKind());

    // test for string literal token
    auto symbol = table.addString("zhang");
    auto stringLiteralToken = Token::makeStrLiteral(symbol, start, end);
    EXPECT_EQ(TK_STR_CONST, stringLiteralToken.getTokenKind());
    EXPECT_TRUE(stringLiteralToken.getSymbol()->equalString("zhang"));

    // test for identifier token
    auto idToken = Token::makeIdentifier(symbol, start, end);
    EXPECT_EQ(TK_ID, idToken.getTokenKind());
    EXPECT_TRUE(idToken.getSymbol()->equalString("zhang"));
}
コード例 #2
0
void CPBSAnalysis::processToken(TRSessionManager *sess, CTRAnalise*an, CTRToken *tk, CPBSSink* pbssink, std::map<short, int> &onts_doc, char * _textChunck, int offset) {
  if (!tk)
    return;
  if (tk->obtemTipo() & TK_CONTR_P1) {
    if (tk->obtemTokenLocucao())
      processSepToken(sess, tk, tk->obtemTokenLocucao(), pbssink, _textChunck, offset);

    // obtem o pr�ximo token da locu��o e trata
    processToken(sess, an, (CTRToken*)tk->obtemTokenLocucao(), pbssink, onts_doc, _textChunck, offset);
    return;
  }
  unsigned char doms[255], n_doms = 255, n_onts = 255;
  unsigned short onts[255];

  // Primeiro colocar a locu��o ou token
  char* token = (char *)alloca(tk->obtemLen() + 1);
  strncpy(token, _textChunck + tk->obtemPosInicial(), tk->obtemLen());
  token[tk->obtemLen()] = '\0';
  std::string word = token;
  pbssink->PutToken(word, tk->obtemLen(), tk->obtemPosInicial() + offset, getTokenKind(tk));
  OpenSemTag *tagloc = sess->obtemOSCData()->checkToken(tk);
  if (tagloc) {
    std::string name = tagloc->getName();
    std::string value = tagloc->getValue(an, tk);
    pbssink->PutFeature(name, value);
  }

  OpenSemTag *tag;
  if ((tag = sess->obtemOSCData()->getTagLemma()) != NULL && tag->checkToken(tk)) {
    std::string name = tag->getName();
    std::string value = tag->getValue(an, tk);
    pbssink->PutFeature(name, value);
  }

  if ((tag = sess->obtemOSCData()->getTagHead()) != NULL && tag->checkToken(tk)) {
    std::string name = tag->getName();
    std::string value = tag->getValue(an, tk);
    pbssink->PutFeature(name, value);
  }
  if ((tag = sess->obtemOSCData()->getTagMrcat()) != NULL && tag->checkToken(tk)) {
    std::string name = tag->getName();
    std::string value = tag->getValue(an, tk);
    pbssink->PutFeature(name, value);
  }
  if ((tag = sess->obtemOSCData()->getTagFullcat()) != NULL && tag->checkToken(tk)) {
    std::string name = tag->getName();
    std::string value = tag->getValue(an, tk);
    pbssink->PutFeature(name, value);
  }
  if (sess->obtemOSCData()->getTagOnt1() || sess->obtemOSCData()->getTagOnt1Raw()) {
    tk->obtemInfoOnt(an->obtemTRExec(), doms, n_doms, onts, NULL, n_onts);
    std::map<short, int>::iterator itr;
    for (int i = 0; i < n_onts; i++) {
      if ((itr = onts_doc.find(onts[i])) != onts_doc.end())
        itr->second++;
      else
        onts_doc.insert(std::pair<short, int>(onts[i], 1));
      char stont[200];
      if (sess->obtemOSCData()->getTagOnt1()) {
        unsigned char id_nivel1, id_nivel2, id_nivel3, id_nivel4;
        char* descs[4];
        CTROntDataNos* nos_ont = an->obtemTRData()->obtemTROntData()->obtemTROntDataNos();
        nos_ont->obtemNiveis(onts[i], id_nivel1, id_nivel2, id_nivel3, id_nivel4);
        nos_ont->obtemDescricoesNiveis(descs, id_nivel1, id_nivel2, id_nivel3, id_nivel4);

        sprintf(stont, "%d.%d.%d.%d - %s / %s / %s / %s", id_nivel1 + 1, id_nivel2 + 1, id_nivel3 + 1, id_nivel4 + 1, descs[0], descs[1], descs[2], descs[3]);

        std::string name = sess->obtemOSCData()->getTagOnt1()->getName();
        std::string value = stont;
        pbssink->PutFeature(name, value);
      }
      if (sess->obtemOSCData()->getTagOnt1Raw()) {
        unsigned char id_nivel1, id_nivel2, id_nivel3, id_nivel4;
        CTROntDataNos* nos_ont = an->obtemTRData()->obtemTROntData()->obtemTROntDataNos();
        nos_ont->obtemNiveis(onts[i], id_nivel1, id_nivel2, id_nivel3, id_nivel4);

        sprintf(stont, "%02d.%02d.%02d.%02d", id_nivel1 + 1, id_nivel2 + 1, id_nivel3 + 1, id_nivel4 + 1);

        std::string name = sess->obtemOSCData()->getTagOnt1Raw()->getName();
        std::string value = stont;
        pbssink->PutFeature(name, value);
      }
    }
  }
  std::string name = "pbt.endfeatures";
  std::string value = "";
  pbssink->PutFeature(name, value);
  if (tk->obtemTokenLocucao())
    processSepToken(sess, tk, tk->obtemTokenLocucao(), pbssink, _textChunck, offset);

  // obtem o pr�ximo token da locu��o e trata
  processToken(sess, an, (CTRToken*)tk->obtemTokenLocucao(), pbssink, onts_doc, _textChunck, offset);
}