Example #1
0
        public void Update(ClientInfo clientInfo)
        {
            SyncStatus       = Shared.Enum.SyncStatus.Staged;
            SyncStatusDate   = DateTime.Now;
            IsFamilyMember   = clientInfo.IsFamilyMember;
            IsPartner        = clientInfo.IsPartner;
            MaritalStatus    = clientInfo.MaritalStatus;
            KeyPop           = clientInfo.KeyPop;
            OtherKeyPop      = clientInfo.OtherKeyPop;
            PreventEnroll    = clientInfo.PreventEnroll;
            AlreadyTestedPos = clientInfo.AlreadyTestedPos;
            UserId           = clientInfo.UserId;

            Identifiers.Clear();
            var identifiers = ClientIdentifier.Create(clientInfo);

            AddIdentifiers(identifiers);

            Relationships.Clear();
            var relationships = ClientRelationship.Create(clientInfo);

            AddRelationships(relationships);

            ClientStates.Clear();
            var stats = ClientState.Create(clientInfo);

            AddClientStates(stats);
        }
Example #2
0
        private void Reset()
        {
            Log(LogEventLevel.Information, "State machine was reset");

            Line     = 1;
            Position = 1;
            _machine.Reset();
            CurrentToken = new StringToken {
                Line = Line
            };
            Identifiers.Clear();
            Constants.Clear();
            Labels.Clear();
            Parsed.Clear();
        }
Example #3
0
        // Сканирование
        public void Scan(string source)
        {
            source = source.Replace('\n', ' ').Replace('\t', ' ');

            Logs.Clear();
            Lexemes.Clear();
            Identifiers.Clear();
            Literals.Clear();

            var  lexeme             = new StringBuilder();
            char character          = ' ';
            int  index              = 0;
            bool GetCharacterResult = false;

            Logs.Add(new ScannerLog(ScannerLogType.Start, null, LexemeType.NA, index, character));

            while (true)
            {
                lexeme.Clear();                                                  // Новая лексема
                GetCharacterResult = GetCharacter(source, index, out character); // Считываем текущий символ
                if (!GetCharacterResult)                                         // Если конец программы - break;
                {
                    Logs.Add(new ScannerLog(ScannerLogType.EndOfFile, lexeme, LexemeType.NA, index, character));
                    break;
                }

                if (IsLetter(character)) // Первый символ - буква
                {                        // <идентификатор> ::= буква | <идентификатор> буква | <идентификатор> цифра
                    Logs.Add(new ScannerLog(ScannerLogType.New, lexeme, LexemeType.IDN, index, character));
                    do
                    {
                        lexeme.Append(character);                                          // Конкатенация
                        Logs.Add(new ScannerLog(ScannerLogType.Concat, lexeme, LexemeType.IDN, index, character));
                        GetCharacterResult = GetCharacter(source, ++index, out character); // Считываем следующий символ
                    }while (GetCharacterResult && IsLetterOrDigit(character));

                    if (IsKeyword(lexeme.ToString()))
                    { // Ключевое слово
                        Logs.Add(new ScannerLog(ScannerLogType.Push, lexeme, LexemeType.KEY, index, character));
                        AddLexeme(LexemeType.KEY, lexeme);
                    }
                    else
                    { // Идентификатор
                        Logs.Add(new ScannerLog(ScannerLogType.Push, lexeme, LexemeType.IDN, index, character));
                        AddLexeme(LexemeType.IDN, lexeme);
                    }
                }

                else if (IsDigit(character)) // Первый символ - цифра
                {                            // <целое> ::= цифра | <целое> цифра
                    Logs.Add(new ScannerLog(ScannerLogType.New, lexeme, LexemeType.INT, index, character));
                    do
                    {
                        lexeme.Append(character);
                        Logs.Add(new ScannerLog(ScannerLogType.Concat, lexeme, LexemeType.INT, index, character));
                        GetCharacterResult = GetCharacter(source, ++index, out character);
                    }while (GetCharacterResult && IsDigit(character));

                    Logs.Add(new ScannerLog(ScannerLogType.Push, lexeme, LexemeType.INT, index, character));
                    AddLexeme(LexemeType.INT, lexeme);
                }

                else if (IsStringDelimiter(character)) // String разделитель
                {
                    int stringStartIndex = index;
                    lexeme.Append(character);
                    Logs.Add(new ScannerLog(ScannerLogType.Concat, lexeme, LexemeType.DLS, index, character));
                    AddLexeme(LexemeType.DLS, lexeme);
                    lexeme.Clear();

                    // Литерал
                    GetCharacterResult = GetCharacter(source, ++index, out character);
                    while (GetCharacterResult && !IsStringDelimiter(character))
                    { // Если мы нашли символ, и это не StringDelimiter
                        lexeme.Append(character);
                        Logs.Add(new ScannerLog(ScannerLogType.Concat, lexeme, LexemeType.STR, index, character));
                        GetCharacterResult = GetCharacter(source, ++index, out character);
                    }

                    Logs.Add(new ScannerLog(ScannerLogType.Push, lexeme, LexemeType.STR, index, character));
                    AddLexeme(LexemeType.STR, lexeme);

                    if (GetCharacterResult)
                    { // Если нашли завершающий StringDelimiter
                        lexeme.Clear();
                        lexeme.Append(character);
                        Logs.Add(new ScannerLog(ScannerLogType.Push, lexeme, LexemeType.DLS, index, character));
                        AddLexeme(LexemeType.DLS, lexeme);
                        index += 1; // Переход на следующий символ
                    }
                    else
                    {
                        Logs.Add(new ScannerLog(ScannerLogType.EndlessString, lexeme, LexemeType.DLS, index, character));
                        throw new ScannerException(stringStartIndex, ' ', "String termination character cannot be found");
                    }
                }

                else if (IsDelimiter1(character.ToString()))
                {
                    lexeme.Append(character);
                    Logs.Add(new ScannerLog(ScannerLogType.New, lexeme, LexemeType.DL1, index, character));

                    GetCharacterResult = GetCharacter(source, ++index, out character);
                    if (GetCharacterResult && IsDelimiter2(lexeme.ToString() + character))
                    { // Двухпозиционный разделитель
                        lexeme.Append(character);
                        Logs.Add(new ScannerLog(ScannerLogType.Push, lexeme, LexemeType.DL2, index, character));
                        AddLexeme(LexemeType.DL2, lexeme);
                        index += 1; // Переход на следующий символ
                    }
                    else
                    { // Однопозиционный разделитель
                        Logs.Add(new ScannerLog(ScannerLogType.Push, lexeme, LexemeType.DL1, index, character));
                        AddLexeme(LexemeType.DL1, lexeme);
                    }
                }

                else if (Char.IsWhiteSpace(character))
                {
                    Logs.Add(new ScannerLog(ScannerLogType.Skip, lexeme, LexemeType.NA, index, character));
                    index += 1;
                }

                else
                {
                    Logs.Add(new ScannerLog(ScannerLogType.Undefined, lexeme, LexemeType.NA, index, character));
                    throw new ScannerException(index, character, "Undefined symbol found");
                }
            }

            Logs.Add(new ScannerLog(ScannerLogType.Success, lexeme, LexemeType.NA, index, character));
        }
Example #4
0
 public void Clear()
 {
     Identifiers.Clear();
     IsMatch = false;
 }
Example #5
0
 public static void Clear()
 {
     Identifiers.Clear();
 }
Example #6
0
 internal void Clear()
 {
     Collector = string.Empty;
     Identifiers.Clear();
     Name = string.Empty;
 }