private boolean skipToNextPhraseWord(boolean quoted) {
        boolean skipped = false;

        do {
            skipped = false;
            if (submodes.url) {
                if (tokens.currentIsNoIgnore(RBRACE)) {
                    braceLevelURL--;
                }
                if (tokens.currentIsNoIgnore(LBRACE)) {
                    braceLevelURL++;
                }
                if (tokens.hasNext() && !tokens.currentIsNoIgnore(SPACE) && braceLevelURL >= 0) {
                    tokens.skip();
                    skipped = true;
                }
            } else if (submodes.site) {
                if (tokens.hasNext() && !tokens.currentIsNoIgnore(SPACE)
                        && !tokens.currentIsNoIgnore(STAR)
                        && !tokens.currentIsNoIgnore(HAT)
                        && !tokens.currentIsNoIgnore(DOLLAR)
                        && !tokens.currentIsNoIgnore(RBRACE)) {
                    tokens.skip();
                    skipped = true;
                }
            } else {
                if (tokens.skipMultipleNoIgnore(DOT)) {
                    skipped = true;
                }
                if (tokens.skipMultipleNoIgnore(COMMA)) {
                    skipped = true;
                }
                if (tokens.skipMultipleNoIgnore(PLUS)) {
                    skipped = true;
                }
                if (tokens.skipMultipleNoIgnore(MINUS)) {
                    skipped = true;
                }
                if (tokens.skipMultipleNoIgnore(UNDERSCORE)) {
                    skipped = true;
                }
                if (tokens.skipMultipleNoIgnore(HAT)) {
                    skipped = true;
                }
                if (tokens.skipMultipleNoIgnore(DOLLAR)) {
                    skipped = true;
                }
                if (tokens.skipMultipleNoIgnore(STAR)) {
                    skipped = true;
                }
                if (tokens.skipMultipleNoIgnore(COLON)) {
                    skipped = true;
                }
                if (tokens.skipMultipleNoIgnore(LCURLYBRACKET)) {
                    skipped = true;
                }
                if (tokens.skipMultipleNoIgnore(RCURLYBRACKET)) {
                    skipped = true;
                }
                if (quoted) {
                    if (tokens.skipMultipleNoIgnore(RBRACE)) {
                        skipped = true;
                    }
                    if (tokens.skipMultipleNoIgnore(LBRACE)) {
                        skipped = true;
                    }
                }
                if (tokens.skipMultipleNoIgnore(NOISE)) {
                    skipped = true;
                }
            }
        } while (skipped && !tokens.currentIsNoIgnore(WORD) && !tokens.currentIsNoIgnore(NUMBER) && !URLModeWordChar());

        return tokens.currentIsNoIgnore(WORD) || tokens.currentIsNoIgnore(NUMBER) || URLModePhraseChar();
    }
Skips one or multiple phrase separators

@return true if the item we land at after skipping zero or more is a phrase word
container-search/src/main/java/com/yahoo/prelude/query/parser/StructuredParser.java