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); }
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!")); }
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"); }