Exemple #1
0
        private static void CheckGroupMissingStartEnd()
        {
            IEnumerator enumerator;

            try
            {
                enumerator = BuilderApp.BuildTables.Group.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    GroupBuild current = (GroupBuild)enumerator.Current;
                    if ((current.Start != null) & (current.End == null))
                    {
                        BuilderApp.Log.Add(SysLogSection.Grammar, SysLogAlert.Critical, "Definition for '" + current.Name + " Start' is missing a matching '" + current.Name + " End'");
                    }
                    else if ((current.Start == null) & (current.End != null))
                    {
                        BuilderApp.Log.Add(SysLogSection.Grammar, SysLogAlert.Critical, "Definition for '" + current.Name + " End' is missing a matching '" + current.Name + " Start'");
                    }
                }
            }
            finally
            {
                if (enumerator is IDisposable)
                {
                    (enumerator as IDisposable).Dispose();
                }
            }
        }
Exemple #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);
        }
Exemple #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);
        }