src/main/java/com/basistech/tclre/Runtime.java
private boolean dissect(RuntimeSubexpression t, int begin, int end) {
        switch (t.op) {
        case '=':       /* terminal node */
            assert t.left == null && t.right == null;
            return true;    /* no action, parent did the work */

        case '|':       /* alternation */
            assert t.left != null;
            return altdissect(t, begin, end);

        case 'b':       /* back ref -- shouldn't be calling us! */
            throw new RuntimeException("impossible backref");

        case '.':       /* concatenation */
            assert t.left != null && t.right != null;
            return condissect(t, begin, end);

        case '(':       /* capturing */
            assert t.left != null && t.right == null;
            assert t.number > 0;
            subset(t, begin, end);
            return dissect(t.left, begin, end);

        default:
            throw new RuntimeException("Impossible op");
        }
    }
private boolean dissect(RuntimeSubexpression t, int begin, int end) {
        switch (t.op) {
        case '=':       /* terminal node */
            assert t.left == null && t.right == null;
            return true;    /* no action, parent did the work */

        case '|':       /* alternation */
            assert t.left != null;
            return altdissect(t, begin, end);

        case 'b':       /* back ref -- shouldn't be calling us! */
            throw new RuntimeException("impossible backref");

        case '.':       /* concatenation */
            assert t.left != null && t.right != null;
            return condissect(t, begin, end);

        case '(':       /* capturing */
            assert t.left != null && t.right == null;
            assert t.number > 0;
            subset(t, begin, end);
            return dissect(t.left, begin, end);

        default:
            throw new RuntimeException("Impossible op");
        }
    }
private boolean dissect ( RuntimeSubexpression t , int begin , int end ) { switch ( t . op ) { case ' ' : /* terminal node */ assert t . left == null && t . right == null ; return true ; /* no action, parent did the work */ case ' ' : /* alternation */ assert t . left != null ; return altdissect ( t , begin , end ) ; case ' ' : /* back ref -- shouldn't be calling us! */ throw new RuntimeException ( "impossible backref" ) ; case ' ' : /* concatenation */ assert t . left != null && t . right != null ; return condissect ( t , begin , end ) ; case ' ' : /* capturing */ assert t . left != null && t . right == null ; assert t . number > 0 ; subset ( t , begin , end ) ; return dissect ( t . left , begin , end ) ; default : throw new RuntimeException ( "Impossible op" ) ; } }
dissect - determine subexpression matches (uncomplicated case)
dissect - determine subexpression matches ( uncomplicated case )