public static void Closure(LRConfigSet ConfigSet) { LRConfigSet setB = new LRConfigSet(); short num3 = (short)(ConfigSet.Count() - 1); for (short i = 0; i <= num3; i = (short)(i + 1)) { LRConfig config2 = ConfigSet[i]; LookaheadSymbolSet set = TotalLookahead(config2); SymbolBuild build = config2.NextSymbol(0); if ((build != null) && (build.Type == SymbolType.Nonterminal)) { LRConfigSet partialClosure = build.PartialClosure; short num4 = (short)(partialClosure.Count() - 1); for (short j = 0; j <= num4; j = (short)(j + 1)) { LRConfig config = partialClosure[j]; LRConfig item = new LRConfig(config.Parent, 0, config.LookaheadSet); if (config.InheritLookahead) { item.LookaheadSet.UnionWith(set); } setB.Add(item); } } } ConfigSet.UnionWith(setB); }
private static LookaheadSymbolSet TotalLookahead(LRConfig Config) { bool flag; LookaheadSymbolSet set = new LookaheadSymbolSet(); for (int i = 0; (i < Config.CheckaheadCount()) & !flag; i++) { short offset = (short)i; i = offset; SymbolBuild build = Config.Checkahead(offset); ConfigTrackSource source = (ConfigTrackSource)Conversions.ToInteger(Interaction.IIf(build.Type == SymbolType.Nonterminal, ConfigTrackSource.First, ConfigTrackSource.Config)); int num4 = build.First.Count() - 1; for (int j = 0; j <= num4; j++) { LookaheadSymbol item = new LookaheadSymbol(build.First[j]); if (item.Parent.Type != SymbolType.Nonterminal) { item.Configs.Add(new ConfigTrack(Config, source)); set.Add(item); } } flag = !build.Nullable; } if (!flag) { set.UnionWith(Config.LookaheadSet); } return(set); }
public LRConfig(ProductionBuild Rule) { this.LookaheadSet = new LookaheadSymbolSet(); this.Parent = Rule; this.Position = 0; this.LookaheadSet = new LookaheadSymbolSet(); this.Modified = true; this.InheritLookahead = false; }
// Methods public LRConfig() { this.LookaheadSet = new LookaheadSymbolSet(); this.Parent = null; this.Position = 0; this.LookaheadSet = new LookaheadSymbolSet(); this.Modified = true; this.InheritLookahead = false; }
public LRConfig(LRConfig Config) { this.LookaheadSet = new LookaheadSymbolSet(); this.Parent = Config.Parent; this.Position = Config.Position; this.LookaheadSet = new LookaheadSymbolSet(); this.Modified = Config.Modified; this.InheritLookahead = Config.InheritLookahead; this.LookaheadSet.Copy(Config.LookaheadSet); }
public LRConfig(ProductionBuild Parent, int Position, LookaheadSymbolSet InitSet) { this.LookaheadSet = new LookaheadSymbolSet(); this.Parent = Parent; this.Position = (short)Position; this.LookaheadSet = new LookaheadSymbolSet(); this.Modified = true; this.InheritLookahead = false; int num2 = InitSet.Count() - 1; for (int i = 0; i <= num2; i++) { this.LookaheadSet.Add(new LookaheadSymbol(InitSet[i])); } }