/// <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);
/// <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);