private static boolean parseBinaryOperation(final @NotNull BinaryOperationParser parser, int level) {
    final PsiBuilder.Marker tempMarker = parser.mark();
    PsiBuilder.Marker lastMarker = tempMarker;
    boolean result = callParsingBinaryOperation(parser, level - 1);
    boolean tempMarkerDeleted = false;
    while (isBinaryOperator(parser, level) && !parser.isNewLine()) {
      final PsiBuilder.Marker operationMarker = lastMarker.precede();
      if (!tempMarkerDeleted) {
        tempMarker.drop();
        tempMarkerDeleted = true;
      }
      lastMarker = operationMarker;
      parseBinaryOperator(parser);
      callParsingBinaryOperation(parser, level - 1);
      parser.done(operationMarker, parser.getOperationElementTypes()[level]);
      result = true;
    }
    if (!tempMarkerDeleted) {
      tempMarker.drop();
    }
    return result;
  }
private static boolean parseBinaryOperation(final @NotNull BinaryOperationParser parser, int level)