Beispiel #1
0
        /// <summary>
        /// Folds a named capture node.
        /// </summary>
        /// <param name="namedCapture"></param>
        /// <param name="argument">The argument to be passed to the visitor method.</param>
        /// <returns>
        /// <list type="number">
        /// <item>The original node if it's to be kept</item>
        /// <item>A different node to replace the original node with</item>
        /// <item>Null if the node is to be removed</item>
        /// </list>
        /// </returns>
        protected override GrammarNode <Char>?VisitNamedCapture(NamedCapture namedCapture, TArgument argument)
        {
            if (namedCapture is null)
            {
                throw new ArgumentNullException(nameof(namedCapture));
            }

            GrammarNode <Char>?innerNode = this.Visit(namedCapture.InnerNode, argument);

            if (innerNode is null)
            {
                return(null);
            }
            else if (innerNode == namedCapture.InnerNode)
            {
                return(namedCapture);
            }
            else
            {
                return(new NamedCapture(namedCapture.Name, innerNode));
            }
        }
 protected override String?VisitNamedCapture(NamedCapture namedCapture, Unit argument) =>
 this.Visit(namedCapture.InnerNode, default);
Beispiel #3
0
 /// <summary>
 /// Visits a named capture.
 /// </summary>
 /// <param name="namedCapture"></param>
 /// <param name="argument">The argument data passed by the caller.</param>
 /// <returns>The result of visiting this node.</returns>
 protected abstract TReturn VisitNamedCapture(NamedCapture namedCapture, TArgument argument);