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