public override bool Scan(SyntaxTreeBuilder pSyntaxTreeBuilder)
 {
     if (!pSyntaxTreeBuilder.KeepScanning)
     {
         return(true);
     }
     if (FirstSet.Contains(pSyntaxTreeBuilder.TokenScanner.Current))
     {
         return(rhs.Scan(pSyntaxTreeBuilder));
     }
     else if (!FirstSet.ContainsEmpty())
     {
         return(false);
     }
     return(true);
 }
Exemplo n.º 2
0
    public override ParseNode_Base Parse(SyntaxTreeBuilder pSyntaxTreeBuilder)
    {
        foreach (var node in nodes)
        {
            if (node.Matches(pSyntaxTreeBuilder))
            {
                return(node.Parse(pSyntaxTreeBuilder));
            }
        }
        if (FirstSet.ContainsEmpty())
        {
            return(NextAfterChild(this, pSyntaxTreeBuilder));
        }

        pSyntaxTreeBuilder.SyntaxErrorExpected(FirstSet);
        return(this);
    }
Exemplo n.º 3
0
    public override bool Scan(SyntaxTreeBuilder pSyntaxTreeBuilder)
    {
        if (!pSyntaxTreeBuilder.KeepScanning)
        {
            return(true);
        }

        foreach (var node in nodes)
        {
            if (node.Matches(pSyntaxTreeBuilder))
            {
                return(node.Scan(pSyntaxTreeBuilder));
            }
        }

        if (!FirstSet.ContainsEmpty())
        {
            return(false);
        }
        return(true);
    }
    public override ParseNode_Base Parse(SyntaxTreeBuilder pSyntaxTreeBuilder)
    {
        bool           wasError = pSyntaxTreeBuilder.ErrorMessage != null;
        ParseNode_Base ret      = null;

        if (FirstSet.Contains(pSyntaxTreeBuilder.TokenScanner.Current))
        {
            ret = rhs.Parse(pSyntaxTreeBuilder);
        }
        if ((ret == null || !wasError && pSyntaxTreeBuilder.ErrorMessage != null) && !FirstSet.ContainsEmpty())
        {
            pSyntaxTreeBuilder.SyntaxErrorExpected(FirstSet);
            return(ret ?? this);
        }
        if (ret != null)
        {
            return(ret);
        }
        return(NextAfterChild(rhs, pSyntaxTreeBuilder)); // ready to be reduced
    }