public void AddAndGetSymbolTest() { var table = new SymbolsTable(); table.Add("Sym"); Assert.Equal(16, table["Sym"]); }
public void AddAndGetLabelTest() { var table = new SymbolsTable(); table.Add("Sym", 5); Assert.Equal(5, table["Sym"]); }
public void GetUndeclaredTest() { var table = new SymbolsTable(); Assert.Equal(16, table.Get("Sym1")); Assert.Equal(17, table.Get("Sym2")); Assert.Equal(16, table.Get("Sym1")); }
public void GetUndeclaredAndAddTest() { var table = new SymbolsTable(); Assert.Equal(16, table.Get("Sym1")); table.Add("Sym1", 5); Assert.Equal(5, table.Get("Sym1")); }
public void AddDuplicatedLabelTest() { var table = new SymbolsTable(); table.Add("Sym", 4); Assert.Throws <SymbolsException>(() => table.Add("Sym", 5)); }
public void DotExceptionTest(params string[] tokenNames) { var symbols = new SymbolsTable(); var reader = new Reader(); var tokens = GetTokens(tokenNames); reader.Read(tokens, symbols); }
public LispEnvironment(LispEnvironment parent) { this.parent = parent; this.symbols = parent.symbols; this.specials = parent.specials; if (Level >= 256) { throw new EnvironmentException("Stack overflow!"); } }
public void ReadEmptyListTest() { var symbols = new SymbolsTable(); var reader = new Reader(); var tokens = new[] { "(", ")" }.Select(s => new Token(s)); var result = reader.Read(tokens, symbols); Assert.AreEqual(1, result.Count); Assert.AreSame(LispNull.Nil, result[0]); }
private void btn_run_Click(object sender, EventArgs e) { this.savechanges(); rtxt_out.Text = ""; tablaSimbolos = new SymbolsTable(); //recorrerAST(ast); metro_tabs.SelectedTab = mt_out; if (this.rtxt_out.Text.Trim().Length <= 0) { ThreadPool.QueueUserWorkItem( (o) => this.executecode() ); } }
public void ReadListTest(int count) { var symbols = new SymbolsTable(); var reader = new Reader(); var innerTokens = GetTokens(count); var tokens = new List<Token> { new Token("(") }; tokens.AddRange(innerTokens); tokens.Add(new Token(")")); var result = reader.Read(tokens, symbols); Assert.AreEqual(1, result.Count); AssertList(result[0], innerTokens); }
public void DottedConsTest() { var symbols = new SymbolsTable(); var reader = new Reader(); const string CarName = "car"; const string CdrName = "cdr"; var tokens = GetTokens("(", CarName, ".", CdrName, ")"); var result = reader.Read(tokens, symbols); Assert.AreEqual(1, result.Count); var car = (Symbol)Car.Of(result[0]); var cdr = (Symbol)Cdr.Of(result[0]); Assert.That(car.SameName(CarName)); Assert.That(cdr.SameName(CdrName)); }
private void CreateCodesTabel() { var unicode = 'а'; for (var i = 0; i < 32; i++) { var code = Convert.ToString(i, 2); var codeLength = code.Length; if (codeLength < 5) { for (var j = 0; j < 5 - codeLength; j++) { code = "0" + code; } } SymbolsTable.Add((char)(unicode + i), code); CodesTable.Add(code, (char)(unicode + i)); } }
public void ReadNestedLists() { var symbols = new SymbolsTable(); var reader = new Reader(); var tokens = new[] { // (a ((b)) ()) "(", "a", "(", "(", "b", ")", ")", "(", ")", ")" }.Select(s => new Token(s)).ToList(); var result = reader.Read(tokens, symbols); Assert.AreEqual(1, result.Count); var list = (Cons)result[0]; var car = (Symbol)Car.Of(list); Assert.That(car.SameName("a")); var cdr = Cdr.Of(list); // (((b)) ()) var cadr = (Cons)Car.Of(cdr); // ((b)) Assert.That(cadr.Cdr.IsNil); var caadr = (Cons)Car.Of(cadr); // (b) Assert.That(caadr.Cdr.IsNil); var caaadr = (Symbol)Car.Of(caadr); // b Assert.That(caaadr.SameName("b")); var cddr = (Cons)Cdr.Of(cdr); // (()) Assert.That(cddr.Car.IsNil); Assert.That(cddr.Cdr.IsNil); }
public void Analysis(string inputText) { inputText = deleteReturnCorret(inputText); int lineCount = 1; int spaceCount = 0; for (int i = 0; i < inputText.Length;) { while (i < inputText.Length && inputText[i] == ' ' && inputText[i] == '\t') { spaceCount++; if (inputText[i] == '\t') { spaceCount += 3; } i++; } if (Char.IsLetter(inputText[i]) || inputText[i] == '_') { string temp = ""; while (i < inputText.Length && !symbols.ContainsKey(inputText[i])) { temp += inputText[i]; ++i; } if (words.ContainsKey(temp)) { TokensTable.Add(new Token(Token.TokenType.WORD, temp, lineCount, spaceCount)); } else { SymbolsTable.Add(new Symbol(temp)); TokensTable.Add(new Token(Token.TokenType.ID, (SymbolsTable.Count - 1).ToString(), lineCount, spaceCount)); } } else if (Char.IsDigit(inputText[i])) { string temp = ""; while (i < inputText.Length && !symbols.ContainsKey(inputText[i])) { temp += inputText[i]; ++i; } TokensTable.Add(new Token(Token.TokenType.CONST, temp, lineCount, spaceCount)); if (temp.Contains('.')) { TokensTable[TokensTable.Count - 1].ConstType = Symbol.SymType.FLOAT; } } else if (symbols.ContainsKey(inputText[i])) { if (symbols[inputText[i]] == Symbols.QMARK || symbols[inputText[i]] == Symbols.QQMARK) { i++; string temp = ""; while (i < inputText.Length && symbols[inputText[i]] != Symbols.QMARK && symbols[inputText[i]] != Symbols.QQMARK) { temp += inputText[i]; i++; } TokensTable.Add(new Token(Token.TokenType.CONST, temp, lineCount, spaceCount, Symbol.SymType.STRING)); i++; spaceCount = 0; continue; } if (symbols[inputText[i]] == Symbols.SRET) { lineCount++; } TokensTable.Add(new Token(Token.TokenType.SYMBOL, inputText[i].ToString(), lineCount, spaceCount)); i++; } else { ErrorsTable.Add(new ErrorMessage($"Unexpected symbol: {inputText[i]}", lineCount)); return; } spaceCount = 0; } }
public LispEnvironment(SymbolsTable symbols, Specials specials) : this(NoParent) { this.symbols = symbols; this.specials = specials; }
public void TryReadUnbalancedExceptionTest(params string[] tokenNames) { var symbols = new SymbolsTable(); var reader = new Reader(); var tokens = GetTokens(tokenNames); IList<LispObject> result; reader.TryRead(tokens, symbols, out result); }
public void TickQuoteAtomTest() { var symbols = new SymbolsTable(); var reader = new Reader(); const string Name = "quoted"; var tokens = GetTokens("'", Name); var result = reader.Read(tokens, symbols); Assert.AreEqual(1, result.Count); var quote = (Symbol)Car.Of(result[0]); var quoted = (Symbol)Car.Of(Cdr.Of(result[0])); Assert.That(quote.SameName("quote")); Assert.That(quoted.SameName(Name)); }
public void SameInternedSymbolTest() { var symbols = new SymbolsTable(); var reader = new Reader(); const string Name = "foo"; var tokens = GetTokens(Name, Name); var result = reader.Read(tokens, symbols); Assert.AreSame(result[0], result[1]); }
public void ReadSymbolsTest(int count) { var symbols = new SymbolsTable(); var reader = new Reader(); var tokens = GetTokens(count); var result = reader.Read(tokens, symbols); Assert.AreEqual(tokens.Count, result.Count); for (int i = 0; i < tokens.Count; i++) { var token = tokens[i]; var symbol = (Symbol)result[i]; Assert.That(symbol.SameName(token.Name)); } }