protected void mergeAndPush(Stack<Fragment> fragStack, CharBuffer chars, Fragment newFrag, ParseContext context) {
        if (fragStack.size() != 0) {
            if (canMerge(chars.lookAhead(1))) {
                Fragment pre = fragStack.pop();
                if (context.canCat()) {
                    newFrag = pre.cat(newFrag);
                } else {
                    newFrag = pre.union(newFrag);
                }

            }
        }
        fragStack.push(newFrag);
    }