public void CheckClosure(ProdItem item) { CSymbol csymbol = item.Next(); if (csymbol == null) { return; } csymbol.AddStartItems(this, item.FirstOfRest(csymbol.m_parser)); if (!item.IsReducingAction()) { return; } this.MaybeAdd(new ProdItem(item.m_prod, item.m_pos + 1)); }
public void AddEntries() { for (ProdItemList prodItemList = this.m_items; prodItemList.m_pi != null; prodItemList = prodItemList.m_next) { ProdItem pi1 = prodItemList.m_pi; if (!pi1.m_done) { CSymbol csymbol = pi1.Next(); if (csymbol != null && !pi1.IsReducingAction()) { ParseState parseState = new ParseState(this.m_sgen, csymbol); parseState.MaybeAdd(new ProdItem(pi1.m_prod, pi1.m_pos + 1)); for (ProdItemList next = prodItemList.m_next; next != null && next.m_pi != null; next = next.m_next) { ProdItem pi2 = next.m_pi; if (csymbol == pi2.Next()) { parseState.MaybeAdd(new ProdItem(pi2.m_prod, pi2.m_pos + 1)); pi2.m_done = true; } } if (!this.m_items.AtEnd) { if (csymbol.IsAction()) { ParseState next = parseState.CheckExists(); foreach (CSymbol key in (IEnumerable)csymbol.m_follow.Keys) { if (key != this.m_sgen.m_symbols.EOFSymbol) { this.GetTransition(key).m_next = new ParserShift((ParserAction)csymbol, next); } } } else { this.GetTransition(csymbol).m_next = new ParserShift((ParserAction)null, parseState.CheckExists()); } } } } } }
public void CheckClosure(ProdItem item) { CSymbol ss = item.Next(); if (ss!=null) { ss.AddStartItems(this,item.FirstOfRest(ss.m_parser)); if (item.IsReducingAction()) MaybeAdd(new ProdItem(item.m_prod, item.m_pos+1)); } }