public IParseResult TryConvertToTokenStream(IStringStream inputStream, out ITokenStream tokenStream) { if (inputStream == null) { throw new ArgumentNullException(); } tokenStream = new TokenStream(); while (!inputStream.IsEmpty()) { var character = inputStream.LookAhead(0); if (!_parserFactory.TryGetTokenParser(character, out var tokenParser)) { return(new FailureParseResult(inputStream.CurrentPosition, RegSeedErrorType.InvalidInput)); } var parseResult = tokenParser.TryGetToken(inputStream, out var token); if (!parseResult.IsSuccess) { return(parseResult); } tokenStream.Append(token); } return(new SuccessParseResult(inputStream.CurrentPosition)); }
public void Pop_IncrementsCurrentPositionByOne_WhenAllStreamElementsAreCharacters() { var stream = new TokenStream(); stream.Append(Substitute.For <IToken>()).Append(Substitute.For <IToken>()); stream.Pop(); stream.Pop(); var result = stream.CurrentPosition; Assert.AreEqual(2, result); }
public void Pop_ReturnsFirstElement() { var token1 = Substitute.For <IToken>(); var token2 = Substitute.For <IToken>(); var token3 = Substitute.For <IToken>(); var stream = new TokenStream(); stream.Append(token1).Append(token2).Append(token3); var result1 = stream.Pop(); var result2 = stream.Pop(); var result3 = stream.Pop(); Assert.AreEqual(token1, result1); Assert.AreEqual(token2, result2); Assert.AreEqual(token3, result3); }