/// <summary>
        /// Implements the visitor pattern for parse nodes.
        /// Dispatches to the specific visit method for this node type.
        /// For example, MethodNode calls the VisitMethod.
        /// </summary>
        /// <param name="visitor"></param>
        public override TResult Accept <TResult>(IInterchangeParseTreeVisitor <TResult> visitor)
        {
#if DEBUG
            if (visitor == null)
            {
                throw new ArgumentNullException();
            }
#endif
            return(visitor.VisitPoolValueInitialization(this));
        }
        /// <summary>
        /// Implements the visitor pattern for parse nodes.
        /// Dispatches to the specific visit method for this node type.
        /// For example, MethodNode calls the VisitMethod.
        /// </summary>
        /// <param name="visitor"></param>
        public override TResult Accept <TResult>(IInterchangeParseTreeVisitor <TResult> visitor)
        {
#if DEBUG
            if (visitor == null)
            {
                throw new ArgumentNullException();
            }
#endif
            return(visitor.VisitGlobalConstantDefinition(this));
        }
        /// <summary>
        /// Implements the visitor pattern for parse nodes.
        /// Dispatches to the specific visit method for this node type.
        /// For example, MethodNode calls the VisitMethod.
        /// </summary>
        /// <param name="visitor"></param>
        public virtual TResult Accept <TResult>(IInterchangeParseTreeVisitor <TResult> visitor)
        {
#if DEBUG
            if (visitor == null)
            {
                throw new ArgumentNullException();
            }
#endif
            return(visitor.VisitInterchangeNode(this));
        }
        /// <summary>
        /// Implements the visitor pattern for parse nodes.
        /// Dispatches to the specific visit method for this node type.
        /// For example, MethodNode calls the VisitMethod.
        /// </summary>
        /// <param name="visitor"></param>
        public override TResult Accept <TResult>(IInterchangeParseTreeVisitor <TResult> visitor)
        {
#if DEBUG
            if (visitor == null)
            {
                throw new ArgumentNullException();
            }
#endif
            return(visitor.VisitInterchangeVersionIdentifier(this));
        }