public void TokensAreExtracted() { //Arrange var testStrings = new [] { "100", "100+", "100 ", "100L", "+-*/", "()", "", null, "(3 *5)+ 49" }; var output = new Output(); //Act foreach (var testString in testStrings) { var result = LexicalAnalyser.ExtractTokens(testString); output.WrapLine($@"Analysis of ""{testString ?? "NULL"}"":"); output.FormatTable(result.AsReport(rep => rep .AddColumn(r => r.TokenType, cc => cc.LeftAlign()) .AddColumn(r => r.Text, cc => {})) ); output.WriteLine(); output.WriteLine(); } //Assert output.Report.Verify(); }
public static ArithmeticExpression Parse(string input) { var tokens = LexicalAnalyser.ExtractTokens(input ?? string.Empty); var pos = new TokenKeeper(tokens); if (TryTakeCalc(pos, out var calculation) && pos.Finished) { return(new ArithmeticExpression(calculation)); } else { var errorMessage = $"Unable to interpret calculation at \"{pos.RemainingData()}\""; return(new ArithmeticExpression(errorMessage)); } }
public TestTokenKeeper() { _tokens = LexicalAnalyser.ExtractTokens(TestExpression).ToList(); _keeper = new TokenKeeper(_tokens); }