public void SEARCH_BY_LEVEL_TEST() { var symbolsTable = new VectorSymbolTable(); var func = new FunctionItem() { Lexeme = "Func1" }; var proc = new ProcItem() { Lexeme = "Proc1" }; var item1 = new IdentificatorItem() { Lexeme = "x", Type = ItemType.Boolean, Level = 1 }; var item2 = new IdentificatorItem() { Lexeme = "a", Type = ItemType.Integer, Level = 2 }; var item3 = new IdentificatorItem() { Lexeme = "b", Type = ItemType.Integer, Level = 2 }; for (int i = 0; i < 5; i++) { symbolsTable.Insert(new IdentificatorItem() { Lexeme = "Item " + i, Type = ItemType.Boolean }); } symbolsTable.Insert(func); symbolsTable.Insert(item1); symbolsTable.Insert(proc); symbolsTable.Insert(item2); symbolsTable.Insert(item3); var result = symbolsTable.SearchByLevel(item1.Lexeme, 1); Assert.AreEqual(result, item1); result = symbolsTable.SearchByLevel(item2.Lexeme, 1); Assert.IsNull(result); result = symbolsTable.SearchByLevel(item1.Lexeme, 2); Assert.IsNull(result); result = symbolsTable.SearchByLevel(item2.Lexeme, 2); Assert.AreEqual(result, item2); result = symbolsTable.SearchByLevel(item3.Lexeme, 2); Assert.AreEqual(result, item3); }
private uint AnalyzeVars() { uint count = 0; do { if (_token.Symbol == Symbols.SIdentificador) { if (_symbolTable.SearchByLevel(_token.Lexeme, _level) != null) { RaiseDoubleError(Symbols.SIdentificador); } _symbolTable.Insert(new IdentificatorItem() { Lexeme = _token.Lexeme, Level = _level, Memory = _memory }); count++; _memory++; NextToken(); if (_token.Symbol == Symbols.SVirgula || _token.Symbol == Symbols.SDoisPontos) { if (_token.Symbol == Symbols.SVirgula) { NextToken(); if (_token.Symbol == Symbols.SDoisPontos) { RaiseGeneralErrorMessage($"Esperado identificador no lugar do símbolo '{_token.Lexeme}'"); } } } else { RaiseUnexpectedTokenError("\",\" ou \":\""); } } } while (_token.Symbol != Symbols.SDoisPontos); NextToken(); AnalyzeType(); return(count); }