/// <summary>
        /// Initializes a new instance of the <see cref="ExpressionTreeParser"/> class with a custom <see cref="INodeTypeProvider"/> and
        /// <see cref="IExpressionTreeProcessor"/> implementation.
        /// </summary>
        /// <param name="nodeTypeProvider">The <see cref="INodeTypeProvider"/> to use when parsing <see cref="Expression"/> trees. Use
        /// <see cref="CreateDefaultNodeTypeProvider"/> to create an instance of <see cref="CompoundNodeTypeProvider"/> that already includes all
        /// default node types. (The <see cref="CompoundNodeTypeProvider"/> can be customized as needed by adding or removing
        /// <see cref="CompoundNodeTypeProvider.InnerProviders"/>).</param>
        /// <param name="processor">The <see cref="IExpressionTreeProcessor"/> to apply to <see cref="Expression"/> trees before parsing their nodes. Use
        /// <see cref="CreateDefaultProcessor"/> to create an instance of <see cref="CompoundExpressionTreeProcessor"/> that already includes
        /// the default steps. (The <see cref="CompoundExpressionTreeProcessor"/> can be customized as needed by adding or removing
        /// <see cref="CompoundExpressionTreeProcessor.InnerProcessors"/>).</param>
        public ExpressionTreeParser(INodeTypeProvider nodeTypeProvider, IExpressionTreeProcessor processor)
        {
            ArgumentUtility.CheckNotNull("nodeTypeProvider", nodeTypeProvider);
            ArgumentUtility.CheckNotNull("processor", processor);

            _nodeTypeProvider           = nodeTypeProvider;
            _processor                  = processor;
            _methodCallExpressionParser = new MethodCallExpressionParser(_nodeTypeProvider);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="ExpressionTreeParser"/> class with a custom <see cref="INodeTypeProvider"/> and 
 /// <see cref="IExpressionTreeProcessor"/> implementation.
 /// </summary>
 /// <param name="nodeTypeProvider">The <see cref="INodeTypeProvider"/> to use when parsing <see cref="Expression"/> trees. Use 
 /// <see cref="CreateDefaultNodeTypeProvider"/> to create an instance of <see cref="CompoundNodeTypeProvider"/> that already includes all
 /// default node types. (The <see cref="CompoundNodeTypeProvider"/> can be customized as needed by adding or removing 
 /// <see cref="CompoundNodeTypeProvider.InnerProviders"/>).</param>
 /// <param name="processor">The <see cref="IExpressionTreeProcessor"/> to apply to <see cref="Expression"/> trees before parsing their nodes. Use
 /// <see cref="CreateDefaultProcessor"/> to create an instance of <see cref="CompoundExpressionTreeProcessor"/> that already includes
 /// the default steps. (The <see cref="CompoundExpressionTreeProcessor"/> can be customized as needed by adding or removing 
 /// <see cref="CompoundExpressionTreeProcessor.InnerProcessors"/>).</param>
 public ExpressionTreeParser (INodeTypeProvider nodeTypeProvider, IExpressionTreeProcessor processor)
 {
   ArgumentUtility.CheckNotNull ("nodeTypeProvider", nodeTypeProvider);
   ArgumentUtility.CheckNotNull ("processor", processor);
   
   _nodeTypeProvider = nodeTypeProvider;
   _processor = processor;
   _methodCallExpressionParser = new MethodCallExpressionParser (_nodeTypeProvider);
 }