- else if ("::=".equals(head)) return nonTerminal(string(tree.child(0)), (PreSequence[][])walk(tree, 1), false, false);
- else if ("!::=".equals(head)) return nonTerminal(string(tree.child(0)), (PreSequence[][])walk(tree, 1), false, true);
- else if ("(".equals(head)) return buildUnion((PreSequence[][])walk(tree, 0));
+ else if ("::=".equals(head)) {
+ forceDrop = false;
+ return nonTerminal(string(tree.child(0)), (Sequence[][])walk(tree, 1), false, false);
+ }
+ else if ("!::=".equals(head)) {
+ forceDrop = true;
+ Object ret = nonTerminal(string(tree.child(0)), (Sequence[][])walk(tree, 1), false, true);
+ forceDrop = false;
+ return ret;
+ }
+ else if ("(".equals(head)) return buildUnion((Sequence[][])walk(tree, 0));