void (PsiBuilder builder) { final PsiBuilder.Marker rangeMarker = builder.mark(); parseCharacter(builder); if (builder.getTokenType() == RegExpTT.MINUS) { final PsiBuilder.Marker minusMarker = builder.mark(); builder.advanceLexer(); final IElementType t = builder.getTokenType(); if (RegExpTT.CHARACTERS.contains(t) || t == RegExpTT.NAMED_CHARACTER) { minusMarker.drop(); parseCharacter(builder); rangeMarker.done(RegExpElementTypes.CHAR_RANGE); } else { if (t == RegExpTT.CLASS_END) { // [a-] rangeMarker.drop(); minusMarker.done(RegExpElementTypes.CHAR); } else if (t == RegExpTT.CLASS_BEGIN) { // [a-[b]]\ rangeMarker.drop(); minusMarker.done(RegExpElementTypes.CHAR); parseClassdef(builder); } else { minusMarker.drop(); builder.error(RegExpBundle.message("parse.error.illegal.character.range")); rangeMarker.done(RegExpElementTypes.CHAR_RANGE); } } } else { rangeMarker.drop(); } }