private void parseCondition(PsiBuilder builder) {
    final IElementType type = builder.getTokenType();
    if (RegExpTT.LOOKAROUND_GROUPS.contains(type)) {
      final PsiBuilder.Marker marker = builder.mark();
      builder.advanceLexer();
      parseGroupEnd(builder);
      marker.done(RegExpElementTypes.GROUP);
    }
    else {
      if (RegExpTT.GROUP_BEGIN == type) {
        IElementType lookAhead = builder.lookAhead(1);
        if (RegExpTT.PCRE_CONDITIONS.contains(lookAhead)) {
          parsePcreConditionalGroup(builder);
        }
        else {
          parseGroupReferenceCondition(builder, RegExpTT.GROUP_END);
        }
      }
      else if (RegExpTT.QUOTED_CONDITION_BEGIN == type) {
        parseGroupReferenceCondition(builder, RegExpTT.QUOTED_CONDITION_END);
      }
      else if (RegExpTT.ANGLE_BRACKET_CONDITION_BEGIN == type) {
        parseGroupReferenceCondition(builder, RegExpTT.ANGLE_BRACKET_CONDITION_END);
      }
    }
  }
private void parseCondition(PsiBuilder builder)