Symbol leftPrevMod = Collins.mapPrevMod(leftPrevMods.symbolAt(0)); Symbol rightPrevMod = Collins.mapPrevMod(rightPrevMods.symbolAt(0)); code = (code << 1) ^ leftPrevMod.hashCode(); code = (code << 1) ^ rightPrevMod.hashCode();
Symbol mappedLeftPrevMod = Collins.mapPrevMod(leftPrevMods.symbolAt(0)); Symbol mappedRightPrevMod = Collins.mapPrevMod(rightPrevMods.symbolAt(0)); code = (code << 2) ^ mappedLeftPrevMod.hashCode(); code = (code << 2) ^ mappedRightPrevMod.hashCode();
    public int hashCode() {      int code = label.hashCode();      code = (code << 2) ^ headWord.hashCode();      if (stop) {	code = (code << 1) | (isPreterminal() ? 1 : 0);	return code;      }      if (leftSubcat != null)	code = (code << 2) ^ leftSubcat.hashCode();      if (rightSubcat != null)	code = (code << 2) ^ rightSubcat.hashCode();      if (headChild != null)	code = (code << 2) ^ headChild.label().hashCode();      Symbol leftPrevMod = Collins.mapPrevMod(leftPrevMods.symbolAt(0));      Symbol rightPrevMod = Collins.mapPrevMod(rightPrevMods.symbolAt(0));      code = (code << 1) ^ leftPrevMod.hashCode();      code = (code << 1) ^ rightPrevMod.hashCode();      int booleanCode = 0;      booleanCode = (booleanCode << 1) | (stop ? 1 : 0);      booleanCode = (booleanCode << 1) | (leftVerb ? 1 : 0);      booleanCode = (booleanCode << 1) | (rightVerb ? 1 : 0);      return code ^ booleanCode;    }