Ejemplo n.º 1
0
        public void AddAndGetSymbolTest()
        {
            var table = new SymbolsTable();

            table.Add("Sym");
            Assert.Equal(16, table["Sym"]);
        }
Ejemplo n.º 2
0
        public void AddAndGetLabelTest()
        {
            var table = new SymbolsTable();

            table.Add("Sym", 5);
            Assert.Equal(5, table["Sym"]);
        }
Ejemplo n.º 3
0
        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"));
        }
Ejemplo n.º 4
0
        public void GetUndeclaredAndAddTest()
        {
            var table = new SymbolsTable();

            Assert.Equal(16, table.Get("Sym1"));
            table.Add("Sym1", 5);
            Assert.Equal(5, table.Get("Sym1"));
        }
Ejemplo n.º 5
0
        public void AddDuplicatedLabelTest()
        {
            var table = new SymbolsTable();

            table.Add("Sym", 4);

            Assert.Throws <SymbolsException>(() => table.Add("Sym", 5));
        }
Ejemplo n.º 6
0
        public void DotExceptionTest(params string[] tokenNames)
        {
            var symbols = new SymbolsTable();
            var reader = new Reader();

            var tokens = GetTokens(tokenNames);
            reader.Read(tokens, symbols);
        }
Ejemplo n.º 7
0
        public LispEnvironment(LispEnvironment parent)
        {
            this.parent = parent;
            this.symbols = parent.symbols;
            this.specials = parent.specials;

            if (Level >= 256)
            {
                throw new EnvironmentException("Stack overflow!");
            }
        }
Ejemplo n.º 8
0
        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]);
        }
Ejemplo n.º 9
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()
                    );
            }
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        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));
        }
Ejemplo n.º 12
0
        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));
            }
        }
Ejemplo n.º 13
0
        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);
        }
Ejemplo n.º 14
0
        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;
            }
        }
Ejemplo n.º 15
0
 public LispEnvironment(SymbolsTable symbols, Specials specials)
     : this(NoParent)
 {
     this.symbols = symbols;
     this.specials = specials;
 }
Ejemplo n.º 16
0
        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);
        }
Ejemplo n.º 17
0
        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));
        }
Ejemplo n.º 18
0
        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]);
        }
Ejemplo n.º 19
0
        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));
            }
        }