public override ParseNode_Base NextAfterChild(ParseNode_Base child, SyntaxTreeBuilder pSyntaxTreeBuilder)
    {
        var SyntaxRule_Cur = pSyntaxTreeBuilder.SyntaxRule_Cur;

        if (SyntaxRule_Cur == null)
        {
            return(null);
        }
        var res = SyntaxRule_Cur.ParseNode != null?SyntaxRule_Cur.ParseNode.NextAfterChild(this, pSyntaxTreeBuilder) : null;

        if (pSyntaxTreeBuilder.Seeking)
        {
            return(res);
        }

        if (contextualKeyword && SyntaxRule_Cur.NumValidNodes == 1)
        {
            var token = SyntaxRule_Cur.LeafAt(0).token;
            token.tokenKind = LexerToken.Kind.ContextualKeyword;
        }
        if (SyntaxRule_Cur.Semantics != SemanticFlags.None)
        {
            pSyntaxTreeBuilder.OnSemanticNodeClose(SyntaxRule_Cur);
        }
        return(res);
    }