Beispiel #1
0
 private static void ClearTables()
 {
     if (TableAsmWords.Items.Count == 0)//создаем раз и навсегда
     {
         TableAsmWords.Create();
     }
     if (TableRegister.Items.Count == 0)
     {
         TableRegister.Create();
     }
     if (TableInstruction.Items.Count == 0)
     {
         TableInstruction.Create();
     }
     if (TableOperand.ItemsFirst.Count == 0 && TableOperand.ItemsSecond.Count == 0)
     {
         TableOperand.Create();
     }
     if (TableAssume.Item.Count == 0)
     {
         new TableAssume();
     }
     if (Errors.Templates.Count == 0)
     {
         Errors.CreateTempl();
     }
     Errors.Table.Clear();
     Errors.Items.Clear();
     Result.Items.Clear();
     Result.Table.Clear();
     TableSegment.Items.Clear();
     TableSegment.Table.Clear();
     TableUser.Items.Clear();
     TableUser.Table.Clear();
 }
Beispiel #2
0
        public TableAsmWords.Types Type; //короткое описание

        #endregion Fields

        #region Constructors

        public TableLexeme(string name, string desc, TableAsmWords.Types type)
        {
            Number = Count + 1;
            Name = name;
            Length = name.Length;
            Description = desc;
            Type = type;
            Items.Add(this);
            Table.Rows.Add(Count, name, name.Length, desc, type);
        }
Beispiel #3
0
        public TableAsmWords.Types Type = TableAsmWords.Types.пусто; //тип предложения

        #endregion Fields

        #region Constructors

        public TableSentence(string mnem, int nameNum, int mnemNum, int[,] opers, TableAsmWords.Types type)
        {
            Type = type;
            Mnem = mnem;
            NameOrLabelNumber = nameNum;
            MnemNumber = mnemNum;
            for (int k = 0; k < 6; k++)
                for (int l = 0; l < 2; l++)
                    Operands[k, l] = opers[k, l];

            Item = this;

            if (Table.Rows.Count <= 0)
                Table.Rows.Add(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
            Table.Rows[0][0] = NameOrLabelNumber;
            Table.Rows[0][1] = MnemNumber;
            for (int p = 0; p < 6; p++)
            {
                Table.Rows[0][p * 2 + 2] = Operands[p, 0];
                Table.Rows[0][p * 2 + 3] = Operands[p, 1];
            }
        }
Beispiel #4
0
        private static string CreateLexemeTable(string Lexeme, int count, int iter)
        {
            char[] Chars = new char[225];

            for (int i = 0; i < iter; i++)
            {
                if (i == 1)
                {
                    count = 1;
                }

                Lexeme.CopyTo(0, Chars, 0, count);
                Lexeme = Lexeme.Remove(0, count);
                string CurrentLexeme = new string(Chars);
                CurrentLexeme = CurrentLexeme.Trim(new Char[] { '\0' });
                Array.Clear(Chars, 0, Chars.Length);

                if (CurrentLexeme == "")
                {
                    continue;//проверка на две односимвольные подряд
                }
                TableAsmWords Word = TableAsmWords.GetByName(CurrentLexeme.ToUpper());
                if (Word != null)//мы знаем эту лексему
                {
                    new TableLexeme(Word.Name, Word.Description, Word.Type);
                }
                else
                {
                    string ConstDescript          = ConstOrUser(CurrentLexeme);
                    TableAsmWords.Types ConstType = TableAsmWords.Types.пусто;
                    switch (ConstDescript)
                    {
                    case "Помилка":
                        ConstType = TableAsmWords.Types.помилка;
                        Errors.Add(1);    //@error недопустимые символы в лексеме
                        break;

                    case "Текстова константа":
                        CurrentLexeme = CurrentLexeme.Remove(0, 1);
                        CurrentLexeme = CurrentLexeme.Remove(CurrentLexeme.Length - 1, 1);
                        ConstType     = TableAsmWords.Types.текст;
                        break;

                    case "Ідентифікатор користувача або невизначений":
                        CurrentLexeme = CurrentLexeme.ToUpper();
                        ConstType     = TableAsmWords.Types.користувач;
                        if (CurrentLexeme.Length > 8)
                        {
                            Errors.Add(3);    //@error Ідентифікатор довший за 8 символів
                        }
                        break;

                    default:
                        CurrentLexeme = CurrentLexeme.ToUpper();
                        ConstType     = TableAsmWords.Types.число;
                        break;
                    }
                    new TableLexeme(CurrentLexeme, ConstDescript, ConstType);
                }
            }
            return(Lexeme);
        }