public Expression Compile(IEnumerable <Expression> expressions, Expression parentContext)
 {
     try
     {
         if (expressions.Any() == false)
         {
             return(_emptyLambda);
         }
         if (expressions.IsOneOf <Expression, DefaultExpression>() == true)
         {
             return(_emptyLambda);
         }
         var compilationContext = new CompilationContext(_configuration);
         var expression         = CreateExpressionBlock(expressions);
         expression = StaticReplacer.Replace(expression, compilationContext);
         expression = UnencodedStatementVisitor.Visit(expression, compilationContext);
         expression = PartialBinder.Bind(expression, compilationContext);
         expression = IteratorBinder.Bind(expression, compilationContext);
         expression = BlockHelperFunctionBinder.Bind(expression, compilationContext);
         expression = DeferredSectionVisitor.Bind(expression, compilationContext);
         expression = HelperFunctionBinder.Bind(expression, compilationContext);
         expression = BoolishConverter.Convert(expression, compilationContext);
         expression = PathBinder.Bind(expression, compilationContext);
         expression = ContextBinder.Bind(expression, compilationContext, parentContext);
         return(expression);
     }
     catch (Exception ex)
     {
         throw new HandlebarsCompilerException("An unhandled exception occurred while trying to compile the template", ex);
     }
 }