src/main/java/com/basistech/tclre/Compiler.java
private void cbracket(State lp, State rp) throws RegexException {
        State left = nfa.newstate();
        State right = nfa.newstate();

        bracket(left, right);
        if (0 != (cflags & Flags.REG_NLSTOP)) {
            nfa.newarc(PLAIN, nlcolor, left, right);
        }

        assert lp.nouts == 0;       /* all outarcs will be ours */

    /* easy part of complementing */
        cm.colorcomplement(nfa, PLAIN, left, lp, rp);

        // No MCCE in Java.
        nfa.dropstate(left);
        assert right.nins == 0;
        nfa.freestate(right);
    }
private void cbracket(State lp, State rp) throws RegexException {
        State left = nfa.newstate();
        State right = nfa.newstate();

        bracket(left, right);
        if (0 != (cflags & Flags.REG_NLSTOP)) {
            nfa.newarc(PLAIN, nlcolor, left, right);
        }

        assert lp.nouts == 0;       /* all outarcs will be ours */

    /* easy part of complementing */
        cm.colorcomplement(nfa, PLAIN, left, lp, rp);

        // No MCCE in Java.
        nfa.dropstate(left);
        assert right.nins == 0;
        nfa.freestate(right);
    }
cbracket - handle complemented bracket expression
We do it by calling bracket() with dummy endpoints, and then complementing
the result.  The alternative would be to invoke rainbow(), and then delete
arcs as the b.e. is seen... but that gets messy.