/** * @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--; } } } } }
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; }