//[Test] static async Task TokernizerTest() { var pTexts = new[] { //"20$", //"20", //"20x", //"(20)", //"20x+30y+20x^2", //"(sin (x))^2+(cos (x))^2=1" //"x", //"2x=3", "20a+3b+c=1\nb=20", }; foreach (var pText in pTexts) { try { using (var pReader = new StringReader(pText)) { var pTokenizer = new ST.Tokenizer(pReader, CancellationToken.None, true); Console.WriteLine($"{pText} :"); while (await pTokenizer.NextToken()) { Console.Write($"Token : {pTokenizer.Token} "); switch (pTokenizer.Token) { case ST.ETokenType.Number: Console.WriteLine(pTokenizer.Number); break; case ST.ETokenType.Identifier: Console.WriteLine(pTokenizer.Identifier); break; default: Console.WriteLine(); break; } if (pTokenizer.EOF) { Console.WriteLine("EOF"); } if (pTokenizer.EOL) { Console.WriteLine("EOL"); pTokenizer.ResetEOL = true; } } } } catch (ST.STException ex) { var pLine = string.Empty; using (var pReader = new StringReader(pText)) { for (var i = ex.Line; i > 0; i--) { pLine = pReader.ReadLine(); } } PrintError(ex.Message); PrintError(pLine); PrintError($"{new string(' ', ex.Position - 1)}^"); } catch (Exception ex) { PrintError(ex.Message); } } }