Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
            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);
            }
Exemplo n.º 3
0
            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);
            }