NextToken() публичный Метод

public NextToken ( ) : Maybe
Результат Maybe
Пример #1
0
        void Case(UString input, TokenType[] tokenTypes, params object[] expected)
        {
            Debug.Assert(expected.Length <= tokenTypes.Length);

            bool error = false;
            var  lexer = new Les3Lexer(input, "", new MessageSinkFromDelegate((type, ctx, msg, args) => {
                TraceMessageSink.Value.Write(type, ctx, msg, args); error = true;
            }));

            int index = 0;

            for (int i = 0; i < tokenTypes.Length; i++)
            {
                error = false;
                Token token = lexer.NextToken().Value;
                Assert.LessOrEqual(index, token.StartIndex);
                Assert.AreEqual(tokenTypes[i], token.Type());
                if (i < expected.Length)
                {
                    var value      = token.IsUninterpretedLiteral ? token.TextValue(lexer).ToString() : token.Value;
                    var expected_i = expected[i];
                    if (expected[i] is Error e)
                    {
                        Assert.IsTrue(error, "Expected error didn't occur in «{0}»", input);
                        expected_i = e.Value;
                    }
                    else
                    {
                        Assert.IsFalse(error, "Unexpected error in token [{0}] of «{1}»", i, input);
                    }
                    if (expected_i is Pair <string, Symbol> pair)
                    {
                        Assert.AreEqual(pair.A, value);
                        Assert.AreEqual(pair.B, token.TypeMarker);
                    }
                    else
                    {
                        Assert.AreEqual(expected_i, value);
                    }
                }
                index = token.EndIndex;
            }
            var nothing = lexer.NextToken();

            Assert.That(!nothing.HasValue, "Extra token after the expected ones in «" + input.ToString() + "»");
        }
Пример #2
0
        void Case(UString input, TokenType[] tokenTypes, params object[] expected)
        {
            Debug.Assert(expected.Length <= tokenTypes.Length);

            bool error = false;
            var  lexer = new Les3Lexer(input, "", new MessageSinkFromDelegate((type, ctx, msg, args) => {
                TraceMessageSink.Value.Write(type, ctx, msg, args); error = true;
            }));

            int index = 0;

            for (int i = 0; i < tokenTypes.Length; i++)
            {
                error = false;
                Token token = lexer.NextToken().Value;
                Assert.LessOrEqual(index, token.StartIndex);
                Assert.AreEqual(tokenTypes[i], token.Type());
                if (i < expected.Length)
                {
                    if (expected[i] is Error)
                    {
                        Assert.IsTrue(error, "Expected error didn't occur in «{0}»", input);
                        Assert.AreEqual(((Error)expected[i]).Value, token.Value);
                    }
                    else
                    {
                        Assert.AreEqual(expected[i], token.Value);
                        Assert.IsFalse(error, "Unexpected error in token [{0}] of «{1}»", i, input);
                    }
                }
                index = token.EndIndex;
            }
            var nothing = lexer.NextToken();

            Assert.That(!nothing.HasValue, "Extra token after the expected ones in «" + input.ToString() + "»");
        }