Example #1
0
        /// <summary>
        /// Folds a negative lookahead node.
        /// </summary>
        /// <param name="negativeLookahead"></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>?VisitNegativeLookahead(NegativeLookahead negativeLookahead, TArgument argument)
        {
            if (negativeLookahead is null)
            {
                throw new ArgumentNullException(nameof(negativeLookahead));
            }

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

            if (innerNode is null)
            {
                return(null);
            }
            else if (innerNode == negativeLookahead.InnerNode)
            {
                return(negativeLookahead);
            }
            else
            {
                return(new NegativeLookahead(innerNode));
            }
        }
 protected override String?VisitNegativeLookahead(NegativeLookahead negativeLookahead, Unit argument) => null;
Example #3
0
 /// <summary>
 /// Visits a negative lookahead.
 /// </summary>
 /// <param name="negativeLookahead"></param>
 /// <param name="argument">The argument data passed by the caller.</param>
 /// <returns>The result of visiting this node.</returns>
 protected abstract TReturn VisitNegativeLookahead(NegativeLookahead negativeLookahead, TArgument argument);