private void AddKernal(Production production, int pos) { ProductionItem item = new ProductionItem(production, pos); this.kernal_items.Add(item); this.all_items.Add(item); }
private void AddNonKernal(Production production) { ProductionItem item = new ProductionItem(production, 0); if (!this.all_items.Contains(item)) { this.all_items.Add(item); this.AddClosure(item); } }
private void AddClosure(ProductionItem item) { if (item.pos < item.production.rhs.Count) { Symbol symbol = item.production.rhs[item.pos]; if (symbol is NonTerminal) { foreach (Production current in ((NonTerminal)symbol).productions) { this.AddNonKernal(current); } } } }
private void AddClosure(ProductionItem item) { if (item.pos < item.production.rhs.Count) { Symbol rhs = item.production.rhs[item.pos]; if (rhs is NonTerminal) { foreach (Production p in ((NonTerminal)rhs).productions) { AddNonKernal(p); } } } }
private State FindExistingState(Symbol sym, List <ProductionItem> itemSet) { if (this.accessedBy.ContainsKey(sym)) { foreach (State current in this.accessedBy[sym]) { if (ProductionItem.SameProductions(current.kernal_items, itemSet)) { return(current); } } } return(null); }
private State FindExistingState(Symbol sym, List <ProductionItem> itemSet) { if (accessedBy.ContainsKey(sym)) { foreach (State state in accessedBy[sym]) { if (ProductionItem.SameProductions(state.kernal_items, itemSet)) { return(state); } } } return(null); }
public Reduce(ProductionItem item) { this.item = item; }
private void AddKernal(Production production, int pos) { ProductionItem item = new ProductionItem(production, pos); kernal_items.Add(item); all_items.Add(item); }
private void AddClosure(ProductionItem item) { if (item.pos < item.production.rhs.Count) { Symbol rhs = item.production.rhs[item.pos]; if (rhs is NonTerminal) foreach (Production p in ((NonTerminal)rhs).productions) AddNonKernal(p); } }
public override bool Equals(object obj) { ProductionItem item = (ProductionItem)obj; return(item.pos == pos && item.production == production); }
public override bool Equals(object obj) { ProductionItem productionItem = (ProductionItem)obj; return(productionItem.pos == this.pos && productionItem.production == this.production); }