Ejemplo n.º 1
0
  public void Merge() {
    Queue<SemiTagNode> openlist = new LinkedList<SemiTagNode>();
    for (SemiTagNode n : allnodes) {
      if (n.IsLowerIncomplete()) {
        openlist.add(n);
      }
    }
    while (!openlist.isEmpty()) {
      SemiTagNode head = openlist.poll();
      // merge to successors
      for (SemiTagEdge oe : head.outegdes) {
        SemiTagNode t = oe.target;
        // if(t.IsComplete() || t.IsLowerIncomplete())
        //	throw new Error("the tag is
        // illegal"+head.Value.getFiniteStrings()+"+++"+t.Value.getFiniteStrings());
        SemiTagNode nn = new SemiTagNode();
        nn.sigs.addAll(head.sigs);
        nn.sigs.addAll(t.sigs);
        nn.Value = head.Value.concatenate(t.Value);
        nn.setStatus();
        // set the relationship to predecessors;
        for (SemiTagEdge ie : head.inegdes) {
          SemiTagEdge nie = new SemiTagEdge(ie.source, nn, ie.methodsig);
          ie.source.outegdes.remove(ie);
          ie.source.outegdes.add(nie);
          nn.inegdes.add(nie);
          nn.inegdes.remove(ie);
        }
        // set the relationship to successors;
        for (SemiTagEdge toe : t.outegdes) {
          SemiTagEdge noe = new SemiTagEdge(nn, toe.target, toe.methodsig);
          toe.target.inegdes.remove(toe);
          toe.target.inegdes.add(noe);
          nn.outegdes.add(noe);
          nn.outegdes.remove(toe);
        }
        allnodes.add(nn);
        if (heads.contains(head)) heads.add(nn);
        if (tails.contains(t)) tails.add(nn);
        if (!nn.IsComplete()) openlist.add(nn);
        allnodes.remove(t);
        heads.remove(t);
        tails.remove(t);
        // if(!nn.IsComplete())
        //	openlist.add(nn);

      }
      allnodes.remove(head);
      heads.remove(head);
      tails.remove(head);
    }
  }
Ejemplo n.º 2
0
 public SemiTagTree clone() {
   SemiTagTree newtree = new SemiTagTree();
   Hashtable<SemiTagNode, SemiTagNode> dup = new Hashtable<SemiTagNode, SemiTagNode>();
   for (SemiTagNode hn : allnodes) dup.put(hn, new SemiTagNode());
   for (SemiTagNode hn : allnodes) {
     SemiTagNode shadow = dup.get(hn);
     for (SemiTagEdge p : hn.inegdes)
       shadow.inegdes.add(new SemiTagEdge(dup.get(p.source), dup.get(p.target), p.methodsig));
     for (SemiTagEdge s : hn.outegdes)
       shadow.outegdes.add(new SemiTagEdge(dup.get(s.source), dup.get(s.target), s.methodsig));
     shadow.Value = hn.Value.clone();
     shadow.status = hn.status;
     shadow.gene = hn.gene;
     shadow.sigs = hn.sigs;
   }
   for (SemiTagNode hn : heads) newtree.heads.add(dup.get(hn));
   for (SemiTagNode hn : tails) newtree.tails.add(dup.get(hn));
   for (SemiTagNode hn : allnodes) newtree.allnodes.add(dup.get(hn));
   return newtree;
 }