예제 #1
0
  /**
   * @param smt1 code当前遍历到的语义
   * @param smt2 semanSet已存在的语义
   * @return
   */
  public void solveTwoSemantic(Semantic smt1, Semantic smt2) {
    // 用新加入的语义对已存在的语义进行化简
    for (int i = 0; i < smt1.getSemanSet().size(); i++) {
      Item item1 = smt1.getSemanSet().get(i);
      for (int j = 0; j < smt2.getSemanSet().size(); j++) {
        Item item2 = smt2.getSemanSet().get(j);
        // null, 已存在的语义删去
        if (null == solveTwoItem(item1, item2)) {
          smt2.getSemanSet().remove(j);
          j--;
        }
      }
    }

    // 去掉三选一的情况
    for (int i = 0; i < smt1.getSemanSet().size(); i++) {
      Item a = smt1.getSemanSet().get(i);
      if (null != a.getPremise()) {
        for (int j = 0; j < smt1.getSemanSet().size(); j++) {
          Item b = smt1.getSemanSet().get(j);
          if (null == b.getPremise() && a.getLeft().equals(b.getLeft())) {
            smt1.getSemanSet().remove(i);
            i--;
          }
        }
      }
    }
  }
예제 #2
0
  public List<Semantic> verificationProcess(List<Semantic> semanSrc) {
    List<Semantic> semanSet = new ArrayList<Semantic>();

    for (int i = 0; i < semanSrc.size(); i++) {
      Semantic smt1 = semanSrc.get(i); // code当前遍历到的语义
      for (int j = 0; j < semanSet.size(); j++) {
        Semantic smt2 = semanSet.get(j); // 已存在semanSet中的语义
        solveTwoSemantic(smt1, smt2);
        if (0 == smt2.getSemanSet().size()) {
          semanSet.remove(j);
          j--;
        }
      }
      if (0 != smt1.getSemanSet().size()) semanSet.add(smt1); // 增加
    }

    //		for(int i = 0; i < semanSet.size(); i++) {
    //			if(semanSet.get(i).getSemanSet().size() == 1) {
    //				if(semanSet.get(i).getSemanSet().get(0).getLeft().contains("GPR")) {
    //					semanSet.remove(i);
    //					i--;
    //				}
    //			}
    //		}

    return semanSet;
  }