package edu.stanford.nlp.trees.tregex.tsurgeon;
import java.util.Map;
import edu.stanford.nlp.trees.Tree;
import edu.stanford.nlp.trees.tregex.TregexMatcher;
/**
* Executes the give children only if the named Tregex node exists in
* the TregexMatcher at match time (allows for OR relations or
* optional relations)
*
* @author John Bauer (horatio@gmail.com)
*/
class IfExistsNode extends TsurgeonPattern {
final String name;
final boolean invert;
public IfExistsNode(String name, boolean invert, TsurgeonPattern ... children) {
super("if " + (invert ? "not " : "") + "exists " + name, children);
this.name = name;
this.invert = invert;
}
@Override
public TsurgeonMatcher matcher(Map<String,Tree> newNodeNames, CoindexationGenerator coindexer) {
return new Matcher(newNodeNames, coindexer);
}
private class Matcher extends TsurgeonMatcher {
public Matcher(Map<String,Tree> newNodeNames, CoindexationGenerator coindexer) {
super(IfExistsNode.this, newNodeNames, coindexer);
}
@Override
public Tree evaluate(Tree tree, TregexMatcher tregex) {
if (invert ^ (tregex.getNode(name) != null)) {
for (TsurgeonMatcher child : childMatcher) {
child.evaluate(tree, tregex);
}
}
return tree;
}
}
}