public override TokenSet Init_FollowSet(ParseNode_Root parser, TokenSet succ)
    {
        Init_PreCheckSet(parser);
        if (LinkedTarget is ParseNode_Rule)
        {
            LinkedTarget.Init_FollowSet(parser, succ);
        }

        return(FirstSet);
    }
 public override TokenSet Init_PreCheckSet(ParseNode_Root parser)
 {
     if (FirstSet == null)
     {
         LinkedTarget = parser.GetRuleOrTakenCopy(Name);
         if (LinkedTarget == null)
         {
             Debug.LogError("Parser rule \"" + Name + "\" not found!!!");
         }
         else
         {
             LinkedTarget.parent     = this;
             LinkedTarget.childIndex = 0;
             FirstSet = LinkedTarget.Init_PreCheckSet(parser);
         }
     }
     return(FirstSet);
 }
    public override ParseNode_Base Parse(SyntaxTreeBuilder pSyntaxTreeBuilder)
    {
        LinkedTarget.parent = this;
        var rule = LinkedTarget as ParseNode_Rule;

        if (rule != null)
        {
            bool skip;
            pSyntaxTreeBuilder.SyntaxRule_Cur = pSyntaxTreeBuilder.SyntaxRule_Cur.AddNode(this, pSyntaxTreeBuilder, out skip);
            if (skip)
            {
                return(pSyntaxTreeBuilder.ParseNode_Cur);
            }
        }
        var result2 = LinkedTarget.Parse(pSyntaxTreeBuilder);

        LinkedTarget.parent = this;
        return(result2);
    }
 public override bool Scan(SyntaxTreeBuilder pSyntaxTreeBuilder)
 {
     return(!pSyntaxTreeBuilder.KeepScanning || LinkedTarget.Scan(pSyntaxTreeBuilder));
 }