예제 #1
0
        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);
        }
예제 #2
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);
        }
예제 #3
0
 public LRConfig(ProductionBuild Rule)
 {
     this.LookaheadSet     = new LookaheadSymbolSet();
     this.Parent           = Rule;
     this.Position         = 0;
     this.LookaheadSet     = new LookaheadSymbolSet();
     this.Modified         = true;
     this.InheritLookahead = false;
 }
예제 #4
0
 // Methods
 public LRConfig()
 {
     this.LookaheadSet     = new LookaheadSymbolSet();
     this.Parent           = null;
     this.Position         = 0;
     this.LookaheadSet     = new LookaheadSymbolSet();
     this.Modified         = true;
     this.InheritLookahead = false;
 }
예제 #5
0
 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);
 }
예제 #6
0
        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]));
            }
        }