/// <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 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); }
#pragma warning restore IDE1006 // Стили именования /// <summary> /// Функция запускает тестирование на основание текста программы. /// Ожидается count терминалов, не считая терминалов CH_. /// </summary> /// <param name="text">Текст программы.</param> /// <param name="count">Количество ожидаемых терминалов.</param> public List <Token> TestOnResourceCount(string text, int count) { StreamReader input = StringToStream(text); List <Token> tokens = lang.SearchTokens(input); tokens.RemoveAll((Token t) => t.Type.Name.Contains("CH_")); input.Close(); foreach (Token token in tokens) { // Печатаем жетоны. Console.WriteLine(token); } Assert.AreEqual(count, tokens.Count); return(tokens); }