/// <summary>
        /// Быстрое проведение тестирования <see cref="Parser.ParserLang"/>.
        /// Удаляет жетоны с CH_.
        /// </summary>
        /// <param name="resource">Текст тестирования.</param>
        /// <param name="isSuccess">True, если ожидается успех парсирования.</param>
        /// <param name="tokens">Количество ожидаемых жетонов. Установите -1 для игнорирования.</param>
        /// <param name="parser">Особые правила парсера. Оставьте null, если нужен язык <see cref="parserLang"/>.</param>
        /// <param name="lexer">Особые правила лексера. Оставьте null, если нужен язык <see cref="lexerLang"/>.</param>
        public ReportParser CheckTest(string resource, bool isSuccess = true, int tokens = -1, ParserLang parser = null, LexerLang lexer = null)
        {
            if (parser == null)
            {
                parser = parserLang;
            }
            if (lexer == null)
            {
                lexer = lexerLang;
            }
            List <Token> listT = lexer.SearchTokens(StringToStream(resource));

            Assert.IsNotNull(listT);
            Console.WriteLine("Count tokens: " + listT.Count);
            foreach (Token token in listT)
            {
                Console.WriteLine(token);
            }
            Console.WriteLine("\n ---- Without CH_:");
            listT.RemoveAll((Token t) => t.Type.Name.Contains("CH_"));
            Console.WriteLine("Count tokens: " + listT.Count);
            foreach (Token token in listT)
            {
                Console.WriteLine(token);
            }
            ReportParser report = parser.Check(listT);

            Console.WriteLine(report);
            if (tokens != -1)
            {
                Assert.AreEqual(tokens, listT.Count);
            }
            Assert.AreEqual(isSuccess, report.IsSuccess);
            return(report);
        }
        public void TestSuperEasyLang()
        {
            List <Token> tokens = EasyLexerLang.SearchTokens(StringToStream("a=2"));

            tokens.RemoveAll((s) => s.Type.Name.Contains("CH_"));
            tokens.WriteAll();
            Console.WriteLine(SuperEasyParserLang.Check(tokens).Compile);
            List <string> StackCode = SuperEasyParserLang.Compile(tokens);

            StackCode.WriteAll();
            CollectionAssert.AreEqual(new string[] { "a", "2", "=" }, StackCode);
            EasyStackLang.Execute(StackCode);
            Assert.AreEqual(2, EasyStackLang.Variables["a"], double.Epsilon);
        }
        public void TestMethod1()
        {
            List <Token> tokens = EasyLexerLang.SearchTokens(StringToStream(Resources.Stack_var_print));

            tokens.RemoveAll((s) => s.Type.Name.Contains("CH_"));
            tokens.WriteAll();
            Console.WriteLine(EasyParserLang.Check(tokens).Compile);
            List <string> StackCode = EasyParserLang.Compile(tokens);

            StackCode.WriteAll();
            CollectionAssert.AreEqual(new string[] { "a", "2", "=", "print" }, StackCode);
            Console.WriteLine("Выполнение стековой машины...");
            EasyStackLang.Execute(StackCode);
            Console.WriteLine("Выполнение стековой машины завершено.");
            Assert.AreEqual(1, EasyStackLang.Variables.Count);
        }