Пример #1
0
        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);
        }
Пример #2
0
        private HashSet <LookaheadSymbol> TotalLookahead(LRConfig config)
        {
            bool flag = false;
            var  set  = new HashSet <LookaheadSymbol>();

            for (int offset = 0; (offset < config.CheckaheadCount()) && !flag; offset++)
            {
                var build = config.Checkahead(offset);
                ConfigTrackSource source = (build.Symbol.Type == ESymbolType.NonTerminal ? ConfigTrackSource.First : ConfigTrackSource.Config);

                foreach (var j in build.First)
                {
                    LookaheadSymbol item = new LookaheadSymbol(j);
                    if (item.Parent.Symbol.Type != ESymbolType.NonTerminal)
                    {
                        item.Configs.Add(new ConfigTrack(config, source));
                        set.Add(item);
                    }
                }
                flag = !build.Nullable;
            }

            if (!flag)
            {
                set.UnionWith(config.LookaheadSet);
            }
            return(set);
        }
Пример #3
0
 public ConfigTrack(LRConfig config, ConfigTrackSource source)
 {
     m_parent     = config;
     m_fromConfig = source == ConfigTrackSource.Config;
     m_fromFirst  = source == ConfigTrackSource.First;
 }
Пример #4
0
 public ConfigTrack(LRConfig Config, ConfigTrackSource Source)
 {
     this.Parent     = Config;
     this.FromConfig = Source == ConfigTrackSource.Config;
     this.FromFirst  = Source == ConfigTrackSource.First;
 }