ExpressionSequence parseExpressionSequence(
      final Arguments arguments, final String input, final boolean preprocess) {

    final String trimmedInput = input.trim();

    final String preprocessedInput =
        (preprocess ? preprocess(arguments, trimmedInput) : trimmedInput);

    final ExpressionSequence cachedExpressionSequence =
        CACHE.getExpressionSequenceFromCache(arguments.getConfiguration(), preprocessedInput);
    if (cachedExpressionSequence != null) {
      return cachedExpressionSequence;
    }

    final ExpressionSequence expressionSequence = ExpressionSequence.parse(preprocessedInput);

    if (expressionSequence == null) {
      throw new TemplateProcessingException(
          "Could not parse as expression sequence: \"" + input + "\"");
    }

    CACHE.putExpressionSequenceIntoCache(
        arguments.getConfiguration(), preprocessedInput, expressionSequence);

    return expressionSequence;
  }