public LalrItem(GrammarProduction production, int parsingPoint, TerminalSymbol lookahead) { if (this.ParsingPoint > production.Body.Count || ParsingPoint < 0) { throw new ArgumentOutOfRangeException(nameof(parsingPoint)); } this.Production = production; this.ParsingPoint = parsingPoint; this.Lookahead = lookahead; }
private bool TestNullable(GrammarProduction prod) { if (prod.Body.Count == 0) { return(true); } if (prod.Body.Any(s => s is TerminalSymbol)) { return(false); } return(prod.Body.All(s => mNullableSymbols.Contains(s as NonterminalSymbol))); }
public LalrReduce(GrammarProduction production) { this.Production = production; }