this.leftModNonterminalMap = server.leftModNonterminalMap(); this.rightModNonterminalMap = server.rightModNonterminalMap();
this.modNonterminalMap = server.modNonterminalMap();
  public Decoder(int id, DecoderServerRemote server) {    this.id = id;    this.server = server;    try {      this.posMap = server.posMap();      posSet = new HashSet();      Iterator posVals = posMap.values().iterator();      while (posVals.hasNext()) {        SexpList posList = (SexpList)posVals.next();        for (int i = 0; i < posList.length(); i++)          posSet.add(posList.get(i));      }      CountsTable nonterminalTable = server.nonterminals();      if (Subcats.get() instanceof SubcatBag)        SubcatBag.setUpFastUidMap(nonterminalTable);      Training.setUpFastArgMap(nonterminalTable);      nonterminals = new Symbol[nonterminalTable.size()];      Iterator it = nonterminalTable.keySet().iterator();      for (int i = 0; it.hasNext(); i++)        nonterminals[i] = (Symbol)it.next();      this.leftSubcatMap = server.leftSubcatMap();      this.rightSubcatMap = server.rightSubcatMap();      this.leftSubcatPS = server.leftSubcatProbStructure().copy();      this.rightSubcatPS = server.rightSubcatProbStructure().copy();      this.leftModNonterminalMap = server.leftModNonterminalMap();      this.rightModNonterminalMap = server.rightModNonterminalMap();      this.modNonterminalPS = server.modNonterminalProbStructure().copy();      prunedPretermsPosMap = new danbikel.util.HashMap();      prunedPretermsPosSet = new HashSet();      Set prunedPreterms = server.prunedPreterms();      it = prunedPreterms.iterator();      while (it.hasNext()) {        Word word = Language.treebank.makeWord((Sexp)it.next());        prunedPretermsPosMap.put(word.word(), word.tag());	prunedPretermsPosSet.add(word.tag());      }      if (debugPrunedPretermsPosMap)	System.err.println("prunedPretermsPosMap: " + prunedPretermsPosMap);      prunedPunctuationPosMap = new danbikel.util.HashMap();      Set prunedPunctuation = server.prunedPunctuation();      it = prunedPunctuation.iterator();      while (it.hasNext()) {        Word word = Language.treebank.makeWord((Sexp)it.next());        prunedPunctuationPosMap.put(word.word(), word.tag());      }      if (debugPrunedPunctuationPosMap)	System.err.println("prunedPunctuationPosMap: " +			   prunedPunctuationPosMap);    } catch (RemoteException re) {      System.err.println(re);    }    leftSubcatPSLastLevel = leftSubcatPS.numLevels() - 1;    rightSubcatPSLastLevel = rightSubcatPS.numLevels() - 1;    modNonterminalPSLastLevel = modNonterminalPS.numLevels() - 1;    String useCellLimitStr = Settings.get(Settings.decoderUseCellLimit);    boolean useCellLimit = Boolean.valueOf(useCellLimitStr).booleanValue();    if (useCellLimit)      cellLimit = Integer.parseInt(Settings.get(Settings.decoderCellLimit));    String usePruneFactStr = Settings.get(Settings.decoderUsePruneFactor);    boolean usePruneFact = Boolean.valueOf(usePruneFactStr).booleanValue();    if (usePruneFact) {      pruneFact = Math.log(10) *                  Double.parseDouble(Settings.get(Settings.decoderPruneFactor));    }    String useCommaConstraintStr =      Settings.get(Settings.decoderUseCommaConstraint);    useCommaConstraint = Boolean.valueOf(useCommaConstraintStr).booleanValue();    chart = new CKYChart(cellLimit, pruneFact);    if (!usePruneFact)      chart.dontDoPruning();    if (debugAnalyzeChart) {      String goldFilename = Settings.get(debugGoldFilenameProperty);      if (goldFilename != null) {	try {	  goldTok = new SexpTokenizer(goldFilename, Language.encoding(),				      Constants.defaultFileBufsize);	}	catch (Exception e) {	  throw new RuntimeException(e.toString());	}      }    }  }