protected DEPNode getNode(FtrToken token) { DEPNode node = null; switch (token.source) { case JointFtrXml.S_STACK : node = getNodeStack(token); break; case JointFtrXml.S_LAMBDA: node = getNodeLambda(token); break; case JointFtrXml.S_BETA : node = getNodeBeta(token); break; } if (node == null) return null; if (token.relation != null) { if (token.isRelation(JointFtrXml.R_H)) node = node.getHead(); else if (token.isRelation(JointFtrXml.R_H2)) node = node.getGrandHead(); else if (token.isRelation(JointFtrXml.R_LMD)) node = d_tree.getLeftMostDependent (node.id); else if (token.isRelation(JointFtrXml.R_RMD)) node = d_tree.getRightMostDependent (node.id); else if (token.isRelation(JointFtrXml.R_LMD2)) node = d_tree.getLeftMostDependent (node.id, 1); else if (token.isRelation(JointFtrXml.R_RMD2)) node = d_tree.getRightMostDependent (node.id, 1); else if (token.isRelation(JointFtrXml.R_LNS)) node = d_tree.getLeftNearestSibling (node.id); else if (token.isRelation(JointFtrXml.R_RNS)) node = d_tree.getRightNearestSibling(node.id); } return node; }