public void Repurpose(string lookahead, AdvanceableRule r) { Clear(); if(!r.Name.Equals(base.Name)) base.Name = r.Name; if(!lookahead.Equals(LookaheadSymbol)) lookaheadSymbol = lookahead; for(int i = 0; i < r.Count; i++) Add(r[i]); }
protected virtual void PopulateSkipList() { for (int i = 0; i < TargetGrammar.Count; i++) { Rule r = TargetGrammar[i]; AdvanceableRule rul = new AdvanceableRule(r.Name); for (int j = 0; j < r.Count; j++) { if (!r[j][0].Equals(r.Name)) { rul.Add(advProds[r[j]]); } } skipList.Add(r.Name, rul); } }
protected virtual void PopulateInitialListings() { for (int i = 0; i < TargetGrammar.Count; i++) { Rule r = TargetGrammar[i]; if (!initialListing.ContainsKey(r)) { var tmp = new AdvanceableRule(r.Name); for (int j = 0; j < r.Count; j++) { tmp.Add(advProds[r[j]]); } initialListing.Add(r, tmp); } } }
protected virtual void PopulateNextCache() { for (int i = 0; i < TargetGrammar.Count; i++) { var r = initialListing[TargetGrammar[i]]; for (int j = 0; j < r.Count; j++) { AdvanceableProduction prod = r[j]; while (prod.HasNext) { var tmp = prod.FunctionalNext(); advancementDict[prod] = tmp; prod = tmp; } advancementDict[prod] = prod; terminates[prod] = new AdvanceableRule(r.Name); terminates[prod].Add(prod); } } }
public LookaheadRule(string lookaheadSymbol, AdvanceableRule rule) : base(rule) { this.lookaheadSymbol = lookaheadSymbol; }