package edu.stanford.nlp.sempre.tables.dpd; import edu.stanford.nlp.sempre.*; import fig.basic.LispTree; /** * Represent a partial formula (a lambda) obtained by applying the rule on the children. * * @author ppasupat */ public class DPDErrorValue extends Value { public final Rule rule; public final Value child1, child2; public final Formula formula; public final int hashCode; public DPDErrorValue(Derivation deriv, Rule rule, Value child1, Value child2) { if (child1 == null && child2 != null) throw new RuntimeException("Cannot have child1 == null while child2 == " + child2); this.rule = rule; this.child1 = child1; this.child2 = child2; if (child1 == null && child2 == null) // No children: Use the formula instead of the children formula = deriv.formula; else formula = null; this.hashCode = rule.hashCode() + (child1 == null ? 0 : child1.hashCode()) * 359 + (child2 == null ? 0 : child2.hashCode()) * 438 + (formula == null ? 0 : formula.hashCode()) * 502; } public DPDErrorValue(Derivation deriv, Rule rule, Derivation child1, Derivation child2) { this(deriv, rule, child1 == null ? null : child1.value, child2 == null ? null : child2.value); } @Override public LispTree toLispTree() { LispTree tree = LispTree.proto.newList(); tree.addChild("dperror"); tree.addChild(rule.toLispTree()); if (child1 != null) tree.addChild(child1.toLispTree()); if (child2 != null) tree.addChild(child2.toLispTree()); if (child1 == null && child2 == null) tree.addChild(formula.toLispTree()); return tree; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; DPDErrorValue that = (DPDErrorValue) o; if (rule != that.rule) return false; if ((child1 == null && that.child1 != null) || (child1 != null && !child1.equals(that.child1))) return false; if ((child2 == null && that.child2 != null) || (child2 != null && !child2.equals(that.child2))) return false; if ((formula == null && that.formula != null) || (formula != null && !formula.equals(that.formula))) return false; return true; } @Override public int hashCode() { return hashCode; } }