Exemplo n.º 1
0
        /// <summary>
        /// Folds a positive lookahead node.
        /// </summary>
        /// <param name="lookahead"></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>?VisitPositiveLookahead(PositiveLookahead lookahead, TArgument argument)
        {
            if (lookahead is null)
            {
                throw new ArgumentNullException(nameof(lookahead));
            }

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

            if (innerNode is null)
            {
                return(null);
            }
            else if (innerNode == lookahead.InnerNode)
            {
                return(lookahead);
            }
            else
            {
                return(new PositiveLookahead(innerNode));
            }
        }
 protected override String?VisitPositiveLookahead(PositiveLookahead positiveLookahead, Unit argument) =>
 this.Visit(positiveLookahead.InnerNode, default);
Exemplo n.º 3
0
 /// <summary>
 /// Visits a lookahead.
 /// </summary>
 /// <param name="positiveLookahead"></param>
 /// <param name="argument">The argument data passed by the caller.</param>
 /// <returns>The result of visiting this node.</returns>
 protected abstract TReturn VisitPositiveLookahead(PositiveLookahead positiveLookahead, TArgument argument);