public GameWindowPresenter(IGameView view) { this.gameView = view; int themeID = 0; try { Lexemes.Clear(); themeID = GetSelectedThemeID(); if (themeID == -1) { throw new Exception("Selected theme for game could not be found, please, select existing one in the Settings menu"); } Lexemes.LexemeDictionary = LexemGateway.GetLexemes(themeID); if (Lexemes.LexemeDictionary.Count < 3) { throw new Exception("The theme should contain at least 3 words to start a game"); } } catch (Exception ex) { this.HandleException("", ex); CanBeStarted = false; return; } this.GameView.OnPlayEnd += new PlayEnd(GameView_OnPlayEnd); this.GameView.OnThrowBegin += new ThrowBegin(GameView_OnThrowBegin); this.GameView.OnThrowEnd += new ThrowEnd(GameView_OnThrowEnd); CanBeStarted = true; }
public static Entry[] ProcessQuery(QueryPostfixForm postfixForm, TermIndexAccessor termIndex, bool appendIdMappings) { Stack opStack = new Stack(); Entry[] result = null; Error = ErrorStatus.NoError; MappedInstances.Clear(); if (!appendIdMappings) { Lexemes.Clear(); Stopwords.Clear(); } try { IteratePostfixExpression(postfixForm, termIndex, opStack); //----------------------------------------------------------------- // Now only one Entry[] must remain on the top of the stack. It may // be null if no document correspond to the query //----------------------------------------------------------------- if (opStack.Count != 1) { throw new ApplicationException("QueryParser -- Illegal query statement found"); } if (!(opStack.Peek() is StopwordTerm)) { result = ExtractOperandFromStack(opStack); if (result != null) { Array.Sort(result, new CompareByTfIdf()); } } } catch (Exception exc) { Trace.WriteLine("QueryProcessor -- exception [" + exc.Message + "] occured."); // Exception is raised if the expression was constructed with // the syntactic errors. // Clear the stack and put special marker on the top of it Error = ErrorStatus.IllegalQuerySyntax; result = null; } opStack.Clear(); return(result); }
void DisplayLexims(int themeID) { Lexemes.Clear(); System.GC.Collect(); ILexemGateway lexemGateway = Gateway.LexemGateway; Lexemes.LexemeDictionary = lexemGateway.GetLexemes(themeID); this.ThemeView.LeximListBox.ClearAllItems(); foreach (Lexeme lex in Lexemes.LexemeCollection) { LeximDTView ldt = new LeximDTView(lex.ID, lex.ParentThemeID, lex.Word, lex.Picture, lex.Sound); this.ThemeView.LeximListBox.AddDisplayLexim(ldt, this.ThemeView.Play); } if (Lexemes.LexemeCollection.Count > 0) { this.ThemeView.LeximListBox.SetSelectionAt(0); } else { this.ThemeView.DisplayLexim(new LeximDTView(0, themeID, string.Empty, null, null), this.ThemeView.Play); } }
// Сканирование 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)); }