code: @Nonnull
    public ExpressionTree parse(@Nonnull final String expressionStr, @Nonnull final PreprocessorContext context) throws IOException {
      assertNotNull("Expression is null", expressionStr);
  
      final PushbackReader reader = new PushbackReader(new StringReader(expressionStr));
  
      final ExpressionTree result;
      final PreprocessingState state = context.getPreprocessingState();
      result = new ExpressionTree(state.makeIncludeStack(), state.getLastReadString());
  
      if (readExpression(reader, result, context, false, false) != null) {
        final String text = "Unexpected result during parsing [" + expressionStr + ']';
        throw context.makeException(text, null);
      }
  
      result.postProcess();
  
      return result;
    }
docs: To parse an expression represented as a string and get a tree
  
  @param expressionStr the expression string to be parsed, must not be null
  @param context       a preprocessor context to be used to get variable values
  @return a tree containing parsed expression
  @throws IOException it will be thrown if there is a problem to read the expression string