Esempio n. 1
0
 public DefinedCharacterSet(string Name, CharacterSetBuild CharSet) : base(CharSet)
 {
     this.m_Name       = "";
     this.m_Definition = "";
     this.m_Comment    = "";
     this.m_Type       = "";
     this.Dependacy    = new NumberSet(new int[0]);
     this.m_Name       = Name.Trim();
 }
Esempio n. 2
0
        private bool LoadVer1(SimpleDB.Reader CGT)
        {
            int  num3;
            bool flag2 = true;

            while (!(CGT.EndOfFile() | !flag2))
            {
                int num7;
                int num8;
                int num10;
                int num14;
                int num15;
                CGT.GetNextRecord();
                switch (CGT.RetrieveByte())
                {
                case 0x43:
                {
                    int num5 = CGT.RetrieveInt16();
                    CharacterSetBuild build5 = new CharacterSetBuild(CGT.RetrieveString())
                    {
                        TableIndex = num5
                    };
                    base.m_CharSet[num5] = build5;
                    continue;
                }

                case 0x44:
                {
                    FAState state = new FAState();
                    num10 = CGT.RetrieveInt16();
                    bool flag3 = CGT.RetrieveBoolean();
                    int  num9  = CGT.RetrieveInt16();
                    CGT.RetrieveEntry();
                    if (!flag3)
                    {
                        goto Label_02DC;
                    }
                    base.m_DFA[num10] = new FAStateBuild((SymbolBuild)base.m_Symbol[num9]);
                    goto Label_0337;
                }

                case 0x49:
                {
                    base.m_DFA.InitialState  = (short)CGT.RetrieveInt16();
                    base.m_LALR.InitialState = (short)CGT.RetrieveInt16();
                    continue;
                }

                case 0x4c:
                    num14 = CGT.RetrieveInt16();
                    CGT.RetrieveEntry();
                    base.m_LALR[num14] = new LRStateBuild();
                    goto Label_03BA;

                case 80:
                {
                    base.m_Properties["Name"].Value           = CGT.RetrieveString();
                    base.m_Properties["Version"].Value        = CGT.RetrieveString();
                    base.m_Properties["Author"].Value         = CGT.RetrieveString();
                    base.m_Properties["About"].Value          = CGT.RetrieveString();
                    base.m_Properties["Case Sensitive"].Value = Conversions.ToString(CGT.RetrieveBoolean());
                    num3 = CGT.RetrieveInt16();
                    continue;
                }

                case 0x52:
                {
                    num7 = CGT.RetrieveInt16();
                    int num6 = CGT.RetrieveInt16();
                    CGT.RetrieveEntry();
                    base.m_Production[num7] = new ProductionBuild((SymbolBuild)base.m_Symbol[num6], (short)num7);
                    goto Label_0272;
                }

                case 0x53:
                {
                    int        tableIndex = CGT.RetrieveInt16();
                    string     name       = CGT.RetrieveString();
                    SymbolType type       = (SymbolType)CGT.RetrieveInt16();
                    base.m_Symbol[tableIndex] = new SymbolBuild(name, type, tableIndex);
                    continue;
                }

                case 0x54:
                {
                    base.m_Symbol     = new SymbolBuildList(CGT.RetrieveInt16());
                    base.m_CharSet    = new CharacterSetBuildList(CGT.RetrieveInt16());
                    base.m_Production = new ProductionBuildList(CGT.RetrieveInt16());
                    base.m_DFA        = new FAStateBuildList(CGT.RetrieveInt16());
                    base.m_LALR       = new LRStateBuildList(CGT.RetrieveInt16());
                    continue;
                }

                default:
                    goto Label_03CB;
                }
Label_0244:
                num8 = CGT.RetrieveInt16();
                base.m_Production[num7].Handle().Add(base.m_Symbol[num8]);
Label_0272:
                if (!CGT.RecordComplete())
                {
                    goto Label_0244;
                }
                continue;
Label_02DC:
                base.m_DFA[num10] = new FAStateBuild();
Label_0337:
                while (!CGT.RecordComplete())
                {
                    int num11  = CGT.RetrieveInt16();
                    int target = CGT.RetrieveInt16();
                    CGT.RetrieveEntry();
                    base.m_DFA[num10].AddEdge(new FAEdgeBuild((CharacterSetBuild)base.m_CharSet[num11], target));
                }
                continue;
Label_0370:
                num15 = CGT.RetrieveInt16();
                int num13 = CGT.RetrieveInt16();
                int num16 = CGT.RetrieveInt16();
                CGT.RetrieveEntry();
                base.m_LALR[num14].Add(new LRAction(base.m_Symbol[num15], (LRActionType)num13, (short)num16));
Label_03BA:
                if (!CGT.RecordComplete())
                {
                    goto Label_0370;
                }
                continue;
Label_03CB:
                flag2 = false;
            }
            this.StartSymbol = base.m_Symbol[num3];
            SymbolBuild build3 = null;
            SymbolBuild build2 = null;
            SymbolBuild build  = null;
            int         num19  = base.m_Symbol.Count() - 1;

            for (int i = 0; i <= num19; i++)
            {
                SymbolBuild build4 = (SymbolBuild)base.m_Symbol[i];
                switch (((int)build4.Type))
                {
                case 2:
                    if (build == null)
                    {
                        build = build4;
                    }
                    break;

                case 4:
                    build3 = build4;
                    break;

                case 5:
                    build2 = build4;
                    break;
                }
            }
            if (build3 != null)
            {
                GroupBuild item  = new GroupBuild();
                int        num17 = base.m_Group.Add(item);
                item.TableIndex = 0;
                item.Name       = "Comment Block";
                item.Container  = build;
                item.Nesting.Add(item.TableIndex);
                item.Advance      = AdvanceMode.Token;
                item.Ending       = EndingMode.Closed;
                item.Start        = build3;
                item.End          = build2;
                item.Start.Group  = item;
                item.End.Group    = item;
                item.NestingNames = "All";
            }
            return(flag2);
        }
Esempio n. 3
0
        private bool LoadVer5(SimpleDB.Reader EGT)
        {
            bool flag2;

            try
            {
                flag2 = true;
                while (!(EGT.EndOfFile() | !flag2))
                {
                    GroupBuild        build;
                    int               num3;
                    int               num4;
                    CharacterSetBuild build2;
                    int               num5;
                    int               num7;
                    int               num8;
                    int               num10;
                    int               num14;
                    int               num15;
                    GroupBuild        build3;
                    int               num17;
                    EGT.GetNextRecord();
                    ParseTables.EGTRecord record = (ParseTables.EGTRecord)EGT.RetrieveByte();
                    switch (((byte)(((int)record) - 0x44)))
                    {
                    case 0:
                    {
                        num10 = EGT.RetrieveInt16();
                        bool flag3 = EGT.RetrieveBoolean();
                        int  num9  = EGT.RetrieveInt16();
                        EGT.RetrieveEntry();
                        if (!flag3)
                        {
                            goto Label_0423;
                        }
                        base.m_DFA[num10] = new FAStateBuild((SymbolBuild)base.m_Symbol[num9]);
                        goto Label_0483;
                    }

                    case 5:
                    {
                        base.m_DFA.InitialState  = (short)EGT.RetrieveInt16();
                        base.m_LALR.InitialState = (short)EGT.RetrieveInt16();
                        continue;
                    }

                    case 8:
                        num14 = EGT.RetrieveInt16();
                        EGT.RetrieveEntry();
                        base.m_LALR[num14] = new LRStateBuild();
                        goto Label_0506;

                    case 14:
                    {
                        num7 = EGT.RetrieveInt16();
                        int num6 = EGT.RetrieveInt16();
                        EGT.RetrieveEntry();
                        base.m_Production[num7] = new ProductionBuild((SymbolBuild)base.m_Symbol[num6], (short)num7);
                        goto Label_03C0;
                    }

                    case 15:
                    {
                        int        tableIndex = EGT.RetrieveInt16();
                        string     name       = EGT.RetrieveString();
                        SymbolType type       = (SymbolType)EGT.RetrieveInt16();
                        base.m_Symbol[tableIndex] = new SymbolBuild(name, type, tableIndex);
                        continue;
                    }

                    case 0x1f:
                        build2 = new CharacterSetBuild();
                        num5   = EGT.RetrieveInt16();
                        EGT.RetrieveInt16();
                        EGT.RetrieveInt16();
                        EGT.RetrieveEntry();
                        goto Label_0323;

                    case 0x23:
                        build            = new GroupBuild();
                        build3           = build;
                        num3             = EGT.RetrieveInt16();
                        build3.Name      = EGT.RetrieveString();
                        build3.Container = base.m_Symbol[EGT.RetrieveInt16()];
                        build3.Start     = base.m_Symbol[EGT.RetrieveInt16()];
                        build3.End       = base.m_Symbol[EGT.RetrieveInt16()];
                        build3.Advance   = (AdvanceMode)EGT.RetrieveInt16();
                        build3.Ending    = (EndingMode)EGT.RetrieveInt16();
                        EGT.RetrieveEntry();
                        num17 = EGT.RetrieveInt16();
                        num4  = 1;
                        goto Label_029B;

                    case 0x2c:
                    {
                        EGT.RetrieveInt16();
                        string str  = EGT.RetrieveString();
                        string str2 = EGT.RetrieveString();
                        base.m_Properties.Add(str, str2);
                        continue;
                    }

                    case 0x30:
                    {
                        base.m_Symbol     = new SymbolBuildList(EGT.RetrieveInt16());
                        base.m_CharSet    = new CharacterSetBuildList(EGT.RetrieveInt16());
                        base.m_Production = new ProductionBuildList(EGT.RetrieveInt16());
                        base.m_DFA        = new FAStateBuildList(EGT.RetrieveInt16());
                        base.m_LALR       = new LRStateBuildList(EGT.RetrieveInt16());
                        base.m_Group      = new GroupBuildList(EGT.RetrieveInt16());
                        continue;
                    }

                    default:
                        goto Label_0517;
                    }
Label_0281:
                    build3.Nesting.Add(EGT.RetrieveInt16());
                    num4++;
Label_029B:
                    if (num4 <= num17)
                    {
                        goto Label_0281;
                    }
                    build3 = null;
                    build.Container.Group = build;
                    build.Start.Group     = build;
                    build.End.Group       = build;
                    base.m_Group[num3]    = build;
                    continue;
Label_030E:
                    build2.AddRange(EGT.RetrieveInt16(), EGT.RetrieveInt16());
Label_0323:
                    if (!EGT.RecordComplete())
                    {
                        goto Label_030E;
                    }
                    build2.TableIndex    = num5;
                    base.m_CharSet[num5] = build2;
                    continue;
Label_0392:
                    num8 = EGT.RetrieveInt16();
                    base.m_Production[num7].Handle().Add(base.m_Symbol[num8]);
Label_03C0:
                    if (!EGT.RecordComplete())
                    {
                        goto Label_0392;
                    }
                    continue;
Label_0423:
                    base.m_DFA[num10] = new FAStateBuild();
Label_0483:
                    while (!EGT.RecordComplete())
                    {
                        int num11  = EGT.RetrieveInt16();
                        int target = EGT.RetrieveInt16();
                        EGT.RetrieveEntry();
                        base.m_DFA[num10].Edges().Add(new FAEdgeBuild((CharacterSetBuild)base.m_CharSet[num11], target));
                    }
                    continue;
Label_04BC:
                    num15 = EGT.RetrieveInt16();
                    int num13 = EGT.RetrieveInt16();
                    int num16 = EGT.RetrieveInt16();
                    EGT.RetrieveEntry();
                    base.m_LALR[num14].Add(new LRAction(base.m_Symbol[num15], (LRActionType)num13, (short)num16));
Label_0506:
                    if (!EGT.RecordComplete())
                    {
                        goto Label_04BC;
                    }
                    continue;
Label_0517:
                    flag2 = false;
                    throw new ParserException("File Error. A record of type '" + Conversions.ToString(Strings.ChrW((int)record)) + "' was read. This is not a valid code.");
                }
                EGT.Close();
            }
            catch (Exception exception1)
            {
                Exception inner = exception1;
                throw new ParserException(inner.Message, inner, "LoadTables");
            }
            return(flag2);
        }
Esempio n. 4
0
        public static void Build()
        {
            short     num3;
            NumberSet nFAList = new NumberSet(new int[0]);
            NumberSet set2    = new NumberSet(new int[0]);

            Notify.Started("Computing DFA States");
            SetupForNFA();
            BuilderApp.Mode = BuilderApp.ProgramMode.BuildingNFA;
            short num5 = (short)(BuilderApp.BuildTables.Symbol.Count() - 1);

            for (num3 = 0; num3 <= num5; num3 = (short)(num3 + 1))
            {
                SymbolBuild sym = BuilderApp.BuildTables.Symbol[num3];
                if (sym.UsesDFA)
                {
                    Notify.Text = sym.Name;
                    CreateNFAStates(sym);
                }
            }
            BuilderApp.Mode = BuilderApp.ProgramMode.NFAClosure;
            short num6 = (short)(NFA.Count - 1);

            for (num3 = 0; num3 <= num6; num3 = (short)(num3 + 1))
            {
                NumberSet reachable = new NumberSet(new int[0]);
                reachable.Add(new int[] { num3 });
                ClosureNFA(reachable);
                NFA[num3].NFAClosure = reachable;
            }
            BuilderApp.BuildTables.CharSet.Clear();
            if (NFA.Count <= 1)
            {
                BuilderApp.Log.Add(SysLogSection.DFA, SysLogAlert.Critical, "There are no terminals in the grammar");
            }
            else
            {
                short num2;
                BuilderApp.Log.Add(SysLogSection.DFA, SysLogAlert.Detail, "The initial Nondeterministic Finite Automata has " + Conversions.ToString(NFA.Count) + " states");
                BuilderApp.BuildTables.DFA.Clear();
                BuilderApp.Mode = BuilderApp.ProgramMode.NFACase;
                SetupMapCaseCharTables(BuilderApp.BuildTables.Properties["Case Sensitive"].Value.ToUpper() == "TRUE", BuilderApp.GetParamCharMapping());
                BuilderApp.Mode = BuilderApp.ProgramMode.BuildingDFA;
                nFAList.Add(new int[] { Root });
                StartState = BuildDFAState(nFAList);
                short num7 = (short)(BuilderApp.BuildTables.DFA.Count - 1);
                for (num3 = 0; num3 <= num7; num3 = (short)(num3 + 1))
                {
                    short num8 = (short)(BuilderApp.BuildTables.DFA[num3].Edges().Count() - 1);
                    num2 = 0;
                    while (num2 <= num8)
                    {
                        FAEdgeBuild       build3     = BuilderApp.BuildTables.DFA[num3].Edges()[num2];
                        CharacterSetBuild characters = build3.Characters;
                        build3.Characters = characters;
                        short num4 = BuilderApp.AddCharacterSet(characters);
                        BuilderApp.BuildTables.DFA[num3].Edges()[num2].Characters = BuilderApp.BuildTables.CharSet[num4];
                        num2 = (short)(num2 + 1);
                    }
                }
                short num9 = (short)(BuilderApp.BuildTables.DFA.Count - 1);
                for (num3 = 0; num3 <= num9; num3 = (short)(num3 + 1))
                {
                    FAStateBuild build = BuilderApp.BuildTables.DFA[num3];
                    if (build.AcceptList.Count() == 0)
                    {
                        build.Accept = null;
                    }
                    else if (build.AcceptList.Count() == 1)
                    {
                        build.Accept = BuilderApp.BuildTables.Symbol[build.AcceptList[0].SymbolIndex];
                    }
                    else
                    {
                        FAAccept accept = build.AcceptList[0];
                        set2.Clear();
                        set2.Add(new int[] { accept.SymbolIndex });
                        short priority = accept.Priority;
                        short num10    = (short)(build.AcceptList.Count() - 1);
                        num2 = 1;
                        while (num2 <= num10)
                        {
                            accept = build.AcceptList[num2];
                            if (accept.Priority == priority)
                            {
                                set2.Add(new int[] { accept.SymbolIndex });
                            }
                            else if (accept.Priority < priority)
                            {
                                set2.Clear();
                                set2.Add(new int[] { accept.SymbolIndex });
                                priority = accept.Priority;
                            }
                            num2 = (short)(num2 + 1);
                        }
                        build.AcceptList.Clear();
                        short num11 = (short)(set2.Count() - 1);
                        for (num2 = 0; num2 <= num11; num2 = (short)(num2 + 1))
                        {
                            build.AcceptList.Add((short)set2[num2], priority);
                        }
                        if (set2.Count() == 1)
                        {
                            build.Accept = BuilderApp.BuildTables.Symbol[set2[0]];
                        }
                    }
                }
                CheckErrorsDFA();
                Notify.Completed("DFA States Completed");
            }
        }
Esempio n. 5
0
        private static short BuildDFAState(NumberSet NFAList)
        {
            int          num4;
            NumberSet    nFAList = new NumberSet(new int[0]);
            FAStateBuild state   = new FAStateBuild();
            int          num8    = NFAList.Count() - 1;

            for (num4 = 0; num4 <= num8; num4++)
            {
                state.NFAStates.UnionWith(NFA[NFAList[num4]].NFAClosure);
            }
            short num6 = DFAStateNumber(state);

            if (num6 == -1)
            {
                int          num3;
                FAStateBuild build4;
                Notify.Counter++;
                num6 = AddDFAState(state);
                int num9 = state.NFAStates.Count() - 1;
                for (num4 = 0; num4 <= num9; num4++)
                {
                    build4 = NFA[state.NFAStates[num4]];
                    int num10 = build4.AcceptList.Count() - 1;
                    num3 = 0;
                    while (num3 <= num10)
                    {
                        FAAccept item = build4.AcceptList[num3];
                        state.AcceptList.Add(item);
                        num3++;
                    }
                }
                NumberSet  set2  = new NumberSet(new int[0]);
                FAEdgeList list  = new FAEdgeList();
                int        num11 = state.NFAStates.Count() - 1;
                for (num4 = 0; num4 <= num11; num4++)
                {
                    build4 = NFA[state.NFAStates[num4]];
                    int num12 = build4.Edges().Count() - 1;
                    num3 = 0;
                    while (num3 <= num12)
                    {
                        if (build4.Edges()[num3].Characters.Count() >= 1)
                        {
                            list.Add(build4.Edges()[num3]);
                            set2.Add(new int[] { build4.Edges()[num3].Target });
                        }
                        num3++;
                    }
                }
                if (set2.Count() >= 1)
                {
                    CharacterSetBuild   build;
                    FAEdgeBuild         build3;
                    CharacterSetBuild[] buildArray = new CharacterSetBuild[(set2.Count() - 1) + 1];
                    int num13 = set2.Count() - 1;
                    for (num4 = 0; num4 <= num13; num4++)
                    {
                        Notify.Analyzed++;
                        build = new CharacterSetBuild();
                        short num7  = (short)set2[num4];
                        int   num14 = list.Count() - 1;
                        num3 = 0;
                        while (num3 <= num14)
                        {
                            build3 = (FAEdgeBuild)list[num3];
                            if (build3.Target == num7)
                            {
                                build.UnionWith(build3.Characters);
                            }
                            num3++;
                        }
                        int num15 = list.Count() - 1;
                        for (num3 = 0; num3 <= num15; num3++)
                        {
                            build3 = (FAEdgeBuild)list[num3];
                            if (build3.Target != num7)
                            {
                                build.DifferenceWith(build3.Characters);
                            }
                        }
                        buildArray[num4] = build;
                    }
                    CharacterSetBuild build5 = new CharacterSetBuild();
                    int num16 = list.Count() - 1;
                    num3 = 0;
                    while (num3 <= num16)
                    {
                        build5.UnionWith(list[num3].Characters);
                        num3++;
                    }
                    int num17 = set2.Count() - 1;
                    for (num4 = 0; num4 <= num17; num4++)
                    {
                        build5.DifferenceWith(buildArray[num4]);
                    }
                    int num18 = set2.Count() - 1;
                    for (num4 = 0; num4 <= num18; num4++)
                    {
                        if (buildArray[num4].Count() >= 1)
                        {
                            nFAList = new NumberSet(new int[0]);
                            nFAList.Add(new int[] { set2[num4] });
                            Notify.Analyzed++;
                            state.AddEdge(buildArray[num4], BuildDFAState(nFAList));
                        }
                    }
                    int num19 = build5.Count() - 1;
                    for (num4 = 0; num4 <= num19; num4++)
                    {
                        nFAList = new NumberSet(new int[0]);
                        int number = build5[num4];
                        int num20  = list.Count() - 1;
                        for (num3 = 0; num3 <= num20; num3++)
                        {
                            build3 = (FAEdgeBuild)list[num3];
                            if (build3.Characters.Contains(number))
                            {
                                nFAList.Add(new int[] { build3.Target });
                            }
                        }
                        if (nFAList.Count() >= 1)
                        {
                            build = new CharacterSetBuild();
                            build.Add(new int[] { number });
                            Notify.Analyzed++;
                            state.AddEdge(build, BuildDFAState(nFAList));
                        }
                    }
                }
                return(num6);
            }
            return(num6);
        }
Esempio n. 6
0
        // Methods
        private static object CreateNewObject(Reduction TheReduction)
        {
            object    left = null;
            Reduction reduction2;
            int       num2;

            object[]   objArray;
            object[]   objArray2;
            bool[]     flagArray;
            RegExpItem item4;
            RegExpSeq  seq5;
            Reduction  reduction = TheReduction;

            switch (reduction.Parent.TableIndex)
            {
            case 13:
                left = Grammar.TokenText(Conversions.ToString(reduction.get_Data(0)));
                break;

            case 14:
                left = Grammar.TokenText(Conversions.ToString(reduction.get_Data(0)));
                break;

            case 15:
            {
                GrammarValueList instance = (GrammarValueList)reduction.get_Data(0);
                objArray    = new object[1];
                reduction2  = reduction;
                num2        = 3;
                objArray[0] = RuntimeHelpers.GetObjectValue(reduction2.get_Data(num2));
                objArray2   = objArray;
                flagArray   = new bool[] { true };
                NewLateBinding.LateCall(instance, null, "Add", objArray2, null, null, flagArray, true);
                if (flagArray[0])
                {
                    reduction2.set_Data(num2, RuntimeHelpers.GetObjectValue(objArray2[0]));
                }
                left = instance;
                break;
            }

            case 0x10:
            {
                GrammarValueList list2 = new GrammarValueList();
                objArray2    = new object[1];
                reduction2   = reduction;
                num2         = 0;
                objArray2[0] = RuntimeHelpers.GetObjectValue(reduction2.get_Data(num2));
                objArray     = objArray2;
                flagArray    = new bool[] { true };
                NewLateBinding.LateCall(list2, null, "Add", objArray, null, null, flagArray, true);
                if (flagArray[0])
                {
                    reduction2.set_Data(num2, RuntimeHelpers.GetObjectValue(objArray[0]));
                }
                left = list2;
                break;
            }

            case 0x11:
                left = Conversions.ToString(reduction.get_Data(0)) + " " + reduction.get_Data(1).ToString();
                break;

            case 0x12:
                left = RuntimeHelpers.GetObjectValue(reduction.get_Data(0));
                break;

            case 0x13:
                left = Grammar.TokenText(Conversions.ToString(reduction.get_Data(0)));
                break;

            case 20:
                left = Grammar.TokenText(Conversions.ToString(reduction.get_Data(0)));
                break;

            case 0x15:
                left = Grammar.TokenText(Conversions.ToString(reduction.get_Data(0)));
                break;

            case 0x16:
            {
                string name = Grammar.TokenText(Conversions.ToString(reduction.get_Data(0)));
                Grammar.AddProperty(name, ((GrammarValueList)reduction.get_Data(3)).ToString(), reduction[0].Position.Line);
                break;
            }

            case 0x17:
            {
                GrammarValueList list4 = (GrammarValueList)reduction.get_Data(0);
                GrammarValueList list  = (GrammarValueList)reduction.get_Data(3);
                list4.Add(list);
                left = list4;
                break;
            }

            case 0x18:
                left = RuntimeHelpers.GetObjectValue(reduction.get_Data(0));
                break;

            case 0x19:
            {
                GrammarAttribAssign assign = new GrammarAttribAssign
                {
                    Name   = Conversions.ToString(reduction.get_Data(0)),
                    Values = (GrammarAttribList)reduction.get_Data(4),
                    Line   = reduction[2].Position.Line
                };
                Grammar.AddSymbolAttrib(assign);
                break;
            }

            case 0x1a:
            {
                GrammarAttribAssign assign2 = new GrammarAttribAssign
                {
                    Name   = Conversions.ToString(Operators.ConcatenateObject(Operators.ConcatenateObject(reduction.get_Data(0), " "), reduction.get_Data(1))),
                    Values = (GrammarAttribList)reduction.get_Data(5),
                    Line   = reduction[3].Position.Line
                };
                Grammar.AddGroupAttrib(assign2);
                break;
            }

            case 0x1b:
            {
                GrammarAttribList list6 = (GrammarAttribList)reduction.get_Data(0);
                list6.Add((GrammarAttrib)reduction.get_Data(3));
                left = list6;
                break;
            }

            case 0x1c:
            {
                GrammarAttribList list7 = new GrammarAttribList();
                list7.Add((GrammarAttrib)reduction.get_Data(0));
                left = list7;
                break;
            }

            case 0x1d:
            {
                GrammarAttrib attrib = new GrammarAttrib
                {
                    Name = Conversions.ToString(reduction.get_Data(0))
                };
                objArray2    = new object[1];
                reduction2   = reduction;
                num2         = 2;
                objArray2[0] = RuntimeHelpers.GetObjectValue(reduction2.get_Data(num2));
                objArray     = objArray2;
                flagArray    = new bool[] { true };
                NewLateBinding.LateCall(attrib.List, null, "Add", objArray, null, null, flagArray, true);
                if (flagArray[0])
                {
                    reduction2.set_Data(num2, RuntimeHelpers.GetObjectValue(objArray[0]));
                }
                attrib.IsSet = false;
                left         = attrib;
                break;
            }

            case 30:
            {
                GrammarAttrib attrib2 = new GrammarAttrib
                {
                    Name  = Conversions.ToString(reduction.get_Data(0)),
                    List  = (GrammarValueList)reduction.get_Data(3),
                    IsSet = true
                };
                left = attrib2;
                break;
            }

            case 0x1f:
            {
                Grammar.GrammarSet charSet = new Grammar.GrammarSet
                {
                    Name = Conversions.ToString(reduction.get_Data(1)),
                    Exp  = (ISetExpression)reduction.get_Data(5),
                    Line = reduction[0].Position.Line
                };
                Grammar.AddUserSet(charSet);
                break;
            }

            case 0x20:
                left = new SetExp((ISetExpression)reduction.get_Data(0), '+', (ISetExpression)reduction.get_Data(3));
                break;

            case 0x21:
                left = new SetExp((ISetExpression)reduction.get_Data(0), '-', (ISetExpression)reduction.get_Data(3));
                break;

            case 0x22:
                left = RuntimeHelpers.GetObjectValue(reduction.get_Data(0));
                break;

            case 0x23:
            {
                reduction2 = reduction;
                num2       = 0;
                string fullText = Conversions.ToString(reduction2.get_Data(num2));
                Grammar.WarnRegexSetLiteral(fullText, reduction[0].Position.Line);
                reduction2.set_Data(num2, fullText);
                left = new SetItem(new CharacterSetBuild(Grammar.TokenText(Conversions.ToString(reduction.get_Data(0)))));
                break;
            }

            case 0x24:
                Grammar.AddUsedSetName(Conversions.ToString(reduction.get_Data(1)), reduction[0].Position.Line);
                left = new SetItem(SetItem.SetType.Name, Conversions.ToString(reduction.get_Data(1)));
                break;

            case 0x25:
            {
                CharacterSetBuild build = (CharacterSetBuild)reduction.get_Data(1);
                left = new SetItem(build);
                break;
            }

            case 0x26:
                left = Operators.ConcatenateObject(Operators.ConcatenateObject(reduction.get_Data(0), " "), reduction.get_Data(1));
                break;

            case 0x27:
                left = RuntimeHelpers.GetObjectValue(reduction.get_Data(0));
                break;

            case 40:
            {
                CharacterSetBuild build2 = (CharacterSetBuild)reduction.get_Data(0);
                CharacterSetRange range  = (CharacterSetRange)reduction.get_Data(3);
                build2.AddRange(range.First, range.Last);
                left = build2;
                break;
            }

            case 0x29:
            {
                CharacterSetBuild build3 = new CharacterSetBuild();
                CharacterSetRange range2 = (CharacterSetRange)reduction.get_Data(0);
                build3.AddRange(range2.First, range2.Last);
                left = build3;
                break;
            }

            case 0x2a:
                left = new CharacterSetRange(Conversions.ToInteger(reduction.get_Data(0)), Conversions.ToInteger(reduction.get_Data(0)));
                break;

            case 0x2b:
                left = new CharacterSetRange(Conversions.ToInteger(reduction.get_Data(0)), Conversions.ToInteger(reduction.get_Data(2)));
                break;

            case 0x2c:
                left = Grammar.GetHexValue(Conversions.ToString(reduction.get_Data(0)));
                if (Conversions.ToBoolean(Operators.OrObject(Operators.CompareObjectLess(left, 0, false), Operators.CompareObjectGreater(left, 0xffff, false))))
                {
                    BuilderApp.Log.Add(SysLogSection.Grammar, SysLogAlert.Critical, "Invalid set constant value", Conversions.ToString(Operators.ConcatenateObject(Operators.ConcatenateObject("The value '", reduction.get_Data(0)), "' is not valid.")), Conversions.ToString(reduction[0].Position.Line));
                }
                break;

            case 0x2d:
                left = Grammar.GetDecValue(Conversions.ToString(reduction.get_Data(0)));
                if (Conversions.ToBoolean(Operators.OrObject(Operators.CompareObjectLess(left, 0, false), Operators.CompareObjectGreater(left, 0xffff, false))))
                {
                    BuilderApp.Log.Add(SysLogSection.Grammar, SysLogAlert.Critical, "Invalid set constant value", Conversions.ToString(Operators.ConcatenateObject(Operators.ConcatenateObject("The value '", reduction.get_Data(0)), "' is not valid.")), Conversions.ToString(reduction[0].Position.Line));
                }
                break;

            case 0x2e:
            {
                string str3 = Conversions.ToString(reduction.get_Data(1));
                string str6 = str3.ToUpper();
                if (((str6 == "LINE") || (str6 == "START")) || (str6 == "END"))
                {
                    Grammar.GrammarGroup g = new Grammar.GrammarGroup(Conversions.ToString(reduction.get_Data(0)), Conversions.ToString(reduction.get_Data(1)), Conversions.ToString(reduction.get_Data(4)), reduction[1].Position.Line);
                    Grammar.AddGroup(g);
                }
                else
                {
                    BuilderApp.Log.Add(SysLogSection.Grammar, SysLogAlert.Critical, "Invalid group usage value", "The usage value '" + str3 + "' is not valid. It can be either Start, End or Line.", Conversions.ToString(reduction[1].Position.Line));
                }
                break;
            }

            case 0x2f:
                left = Grammar.TokenText(Conversions.ToString(reduction.get_Data(0)));
                break;

            case 0x30:
                left = Grammar.TokenText(Conversions.ToString(reduction.get_Data(0)));
                break;

            case 0x31:
            {
                Grammar.GrammarSymbol sym = new Grammar.GrammarSymbol
                {
                    Name = Conversions.ToString(reduction.get_Data(0)),
                    Exp  = (RegExp)reduction.get_Data(3),
                    Line = reduction[2].Position.Line,
                    Type = SymbolType.Content
                };
                Grammar.AddTerminalHead(sym);
                break;
            }

            case 50:
            {
                RegExp    exp = (RegExp)reduction.get_Data(0);
                RegExpSeq seq = (RegExpSeq)reduction.get_Data(3);
                seq.Priority = -1;
                exp.Add(seq);
                left = exp;
                break;
            }

            case 0x33:
            {
                RegExp    exp2 = new RegExp();
                RegExpSeq seq2 = (RegExpSeq)reduction.get_Data(0);
                seq2.Priority = -1;
                exp2.Add(seq2);
                left = exp2;
                break;
            }

            case 0x34:
            {
                RegExpSeq seq3 = (RegExpSeq)reduction.get_Data(0);
                reduction2 = reduction;
                num2       = 1;
                item4      = (RegExpItem)reduction2.get_Data(num2);
                seq3.Add(item4);
                reduction2.set_Data(num2, item4);
                left = seq3;
                break;
            }

            case 0x35:
            {
                RegExpSeq seq4 = new RegExpSeq();
                reduction2 = reduction;
                num2       = 0;
                item4      = (RegExpItem)reduction2.get_Data(num2);
                seq4.Add(item4);
                reduction2.set_Data(num2, item4);
                left = seq4;
                break;
            }

            case 0x36:
            {
                SetItem data = (SetItem)reduction.get_Data(0);
                left = new RegExpItem(data, Conversions.ToString(reduction.get_Data(1)));
                break;
            }

            case 0x37:
            {
                SetItem item2 = new SetItem(SetItem.SetType.Sequence, Grammar.TokenText(Conversions.ToString(reduction.get_Data(0))));
                left = new RegExpItem(item2, Conversions.ToString(reduction.get_Data(1)));
                break;
            }

            case 0x38:
            {
                SetItem item3 = new SetItem(SetItem.SetType.Sequence, Conversions.ToString(reduction.get_Data(0)));
                left = new RegExpItem(item3, Conversions.ToString(reduction.get_Data(1)));
                break;
            }

            case 0x39:
                left = new RegExpItem(RuntimeHelpers.GetObjectValue(reduction.get_Data(1)), Conversions.ToString(reduction.get_Data(3)));
                break;

            case 0x3a:
            {
                RegExp exp3 = (RegExp)reduction.get_Data(0);
                reduction2 = reduction;
                num2       = 2;
                seq5       = (RegExpSeq)reduction2.get_Data(num2);
                exp3.Add(seq5);
                reduction2.set_Data(num2, seq5);
                left = exp3;
                break;
            }

            case 0x3b:
            {
                RegExp exp4 = new RegExp();
                reduction2 = reduction;
                num2       = 0;
                seq5       = (RegExpSeq)reduction2.get_Data(num2);
                exp4.Add(seq5);
                reduction2.set_Data(num2, seq5);
                left = exp4;
                break;
            }

            case 60:
                left = "+";
                break;

            case 0x3d:
                left = "?";
                break;

            case 0x3e:
                left = "*";
                break;

            case 0x3f:
                left = "";
                break;

            case 0x40:
            {
                IEnumerator enumerator;
                Grammar.GrammarProductionList list8   = (Grammar.GrammarProductionList)reduction.get_Data(3);
                Grammar.GrammarSymbol         symbol2 = new Grammar.GrammarSymbol
                {
                    Name = Grammar.TokenText(Conversions.ToString(reduction.get_Data(0))),
                    Type = SymbolType.Nonterminal,
                    Line = reduction[2].Position.Line
                };
                try
                {
                    enumerator = list8.GetEnumerator();
                    while (enumerator.MoveNext())
                    {
                        Grammar.GrammarProduction current = (Grammar.GrammarProduction)enumerator.Current;
                        current.Head = symbol2;
                        Grammar.AddProduction(current);
                    }
                }
                finally
                {
                    if (enumerator is IDisposable)
                    {
                        (enumerator as IDisposable).Dispose();
                    }
                }
                break;
            }

            case 0x41:
            {
                Grammar.GrammarProductionList list9 = (Grammar.GrammarProductionList)reduction.get_Data(0);
                Grammar.GrammarProduction     item  = new Grammar.GrammarProduction
                {
                    Handle = (Grammar.GrammarSymbolList)reduction.get_Data(3),
                    Line   = reduction[2].Position.Line
                };
                list9.Add(item);
                left = list9;
                break;
            }

            case 0x42:
            {
                Grammar.GrammarProductionList list10      = new Grammar.GrammarProductionList();
                Grammar.GrammarProduction     production3 = new Grammar.GrammarProduction
                {
                    Handle = (Grammar.GrammarSymbolList)reduction.get_Data(0)
                };
                list10.Add(production3);
                left = list10;
                break;
            }

            case 0x43:
            {
                Grammar.GrammarSymbolList list11 = (Grammar.GrammarSymbolList)reduction.get_Data(0);
                left = list11;
                break;
            }

            case 0x44:
            {
                Grammar.GrammarSymbolList list12 = new Grammar.GrammarSymbolList();
                left = list12;
                break;
            }

            case 0x45:
            {
                Grammar.GrammarSymbolList list13 = (Grammar.GrammarSymbolList)reduction.get_Data(0);
                list13.Add((Grammar.GrammarSymbol)reduction.get_Data(1));
                left = list13;
                break;
            }

            case 70:
            {
                Grammar.GrammarSymbolList list14 = new Grammar.GrammarSymbolList();
                left = list14;
                break;
            }

            case 0x47:
            {
                Grammar.GrammarSymbol symbol3 = new Grammar.GrammarSymbol(Conversions.ToString(reduction.get_Data(0)), SymbolType.Content, reduction[0].Position.Line);
                Grammar.AddHandleSymbol(symbol3);
                left = symbol3;
                break;
            }

            case 0x48:
            {
                Grammar.GrammarSymbol symbol4 = new Grammar.GrammarSymbol(Grammar.TokenText(Conversions.ToString(reduction.get_Data(0))), SymbolType.Nonterminal, reduction[0].Position.Line);
                Grammar.AddHandleSymbol(symbol4);
                left = symbol4;
                break;
            }
            }
            reduction = null;
            return(left);
        }