Esempio n. 1
0
        public void input_that_repeats_less_than_parsers_lower_bound_fails()
        {
            var term = new LiteralString("op!");
            var scanner = new ScanStrings("op!op!");
            IParser subject = new Repetition(term, 4, 5);

            var result = subject.Parse(scanner);

            Assert.That(result.Success, Is.False);
        }
Esempio n. 2
0
        public void input_that_repeats_more_than_parsers_upper_bound_passes_and_captures_only_expected_max_range()
        {
            var term = new LiteralString("op!");
            var scanner = new ScanStrings("op!op!op!op!op!op!op!op!");
            IParser subject = new Repetition(term, 3, 3);

            var result = subject.Parse(scanner);

            Assert.That(result.Success, Is.True);
            Assert.That(result.Value, Is.EqualTo("op!op!op!"));
        }
Esempio n. 3
0
        public void input_that_repeats_exactly_as_many_as_the_upper_bound_passes_and_captures_all_input()
        {
            var term = new LiteralString("op!");
            var scanner = new ScanStrings("op!op!op!");
            IParser subject = new Repetition(term, 1, 3);

            var result = subject.Parse(scanner);

            Assert.That(result.Success, Is.True);
            Assert.That(result.Value, Is.EqualTo("op!op!op!"));
        }
        public void a_recursive_parser_pattern()
        {
            // Build a parser for patterns of nested square brackets
            subject = Recursion.Over(recursive =>
            {
                var left = new LiteralCharacter('[');
                var right = new LiteralCharacter(']');

                var mrec = new Repetition(recursive, 0, int.MaxValue);
                var lrec = new Sequence(left, mrec);
                var lr = new Sequence(lrec, right);

                return lr;
            });

            valid_recursive = new ScanStrings("[[[][]]]");
            valid_simple = new ScanStrings("[]");
            invalid_recursive = new ScanStrings("[[[][[[]]]"); // unbalanced
            invalid_simple = new ScanStrings("hello, world");
        }