예제 #1
0
        public void It_Can_Expect_A_Sequence_Of_Tokens()
        {
            IEnumerable <RuleResult> SequenceRule(CurrentTokenCallback t)
            {
                yield return(Expect.Symbol(t(), "("));

                yield return(Expect.Symbol(t(), ")"));

                yield return(Expect.Symbol(t(), "{", true));
            }

            var parser = new RuleCoroutineParser(SequenceRule);
            var tokens = new[]
            {
                "(",
                ")",
                "{"
            }.Select(t => new Token(new CodePos(0, 0), TokenType.Symbol, t));

            // Feed all the tokens to the parser
            RuleResult result = default;

            foreach (Token t in tokens)
            {
                result = parser.FeedToken(t);
            }

            // Assert that it completed and returned the node.
            // In this test, the "node" is just a boolean.
            result.AssertComplete();
            Assert.Equal(true, result.node);
        }
        public static TNode AssertComplete <TNode>(this RuleResult result)
        {
            if (result.status == RuleStatus.Failed)
            {
                throw result.error;
            }

            var node = result.AssertComplete();

            return(Assert.IsAssignableFrom <TNode>(node));
        }