Index: petitparser/lib/src/core/repeaters.dart |
diff --git a/petitparser/lib/src/core/repeaters.dart b/petitparser/lib/src/core/repeaters.dart |
deleted file mode 100644 |
index 79c8cd1b81801df77f5754da592d195e05a6a564..0000000000000000000000000000000000000000 |
--- a/petitparser/lib/src/core/repeaters.dart |
+++ /dev/null |
@@ -1,185 +0,0 @@ |
-part of petitparser; |
- |
-/** |
- * An [int] used to mark an unbounded maximum repetition. |
- */ |
-const int unbounded = -1; |
- |
-/** |
- * An abstract parser that repeatedly parses between 'min' and 'max' instances of |
- * its delegate. |
- */ |
-abstract class RepeatingParser extends DelegateParser { |
- final int _min; |
- final int _max; |
- |
- RepeatingParser(Parser parser, this._min, this._max) : super(parser) { |
- assert(0 <= _min); |
- assert(_max == unbounded || _min <= _max); |
- } |
- |
- @override |
- String toString() { |
- var max = _max == unbounded ? '*' : _max; |
- return '${super.toString()}[$_min..$max]'; |
- } |
- |
- @override |
- bool hasEqualProperties(Parser other) { |
- return other is RepeatingParser |
- && super.hasEqualProperties(other) |
- && _min == other._min |
- && _max == other._max; |
- } |
-} |
- |
-/** |
- * A greedy parser that repeatedly parses between 'min' and 'max' instances of |
- * its delegate. |
- */ |
-class PossessiveRepeatingParser extends RepeatingParser { |
- PossessiveRepeatingParser(Parser parser, int min, int max) |
- : super(parser, min, max); |
- |
- @override |
- Result parseOn(Context context) { |
- var current = context; |
- var elements = new List(); |
- while (elements.length < _min) { |
- var result = _delegate.parseOn(current); |
- if (result.isFailure) { |
- return result; |
- } |
- elements.add(result.value); |
- current = result; |
- } |
- while (_max == unbounded || elements.length < _max) { |
- var result = _delegate.parseOn(current); |
- if (result.isFailure) { |
- return current.success(elements); |
- } |
- elements.add(result.value); |
- current = result; |
- } |
- return current.success(elements); |
- } |
- |
- @override |
- Parser copy() => new PossessiveRepeatingParser(_delegate, _min, _max); |
-} |
- |
-/** |
- * An abstract parser that repeatedly parses between 'min' and 'max' instances of |
- * its delegate and that requires the input to be completed with a specified parser |
- * 'limit'. Subclasses provide repeating behavior as typically seen in regular |
- * expression implementations (non-blind). |
- */ |
-abstract class LimitedRepeatingParser extends RepeatingParser { |
- Parser _limit; |
- |
- LimitedRepeatingParser(Parser parser, this._limit, int min, int max) |
- : super(parser, min, max); |
- |
- @override |
- List<Parser> get children => [_delegate, _limit]; |
- |
- @override |
- void replace(Parser source, Parser target) { |
- super.replace(source, target); |
- if (_limit == source) { |
- _limit = target; |
- } |
- } |
-} |
- |
-/** |
- * A greedy repeating parser, commonly seen in regular expression implementations. It |
- * aggressively consumes as much input as possible and then backtracks to meet the |
- * 'limit' condition. |
- */ |
-class GreedyRepeatingParser extends LimitedRepeatingParser { |
- GreedyRepeatingParser(Parser parser, Parser limit, int min, int max) |
- : super(parser, limit, min, max); |
- |
- @override |
- Result parseOn(Context context) { |
- var current = context; |
- var elements = new List(); |
- while (elements.length < _min) { |
- var result = _delegate.parseOn(current); |
- if (result.isFailure) { |
- return result; |
- } |
- elements.add(result.value); |
- current = result; |
- } |
- var contexts = new List.from([current]); |
- while (_max == unbounded || elements.length < _max) { |
- var result = _delegate.parseOn(current); |
- if (result.isFailure) { |
- break; |
- } |
- elements.add(result.value); |
- contexts.add(current = result); |
- } |
- while (true) { |
- var limit = _limit.parseOn(contexts.last); |
- if (limit.isSuccess) { |
- return contexts.last.success(elements); |
- } |
- if (elements.isEmpty) { |
- return limit; |
- } |
- contexts.removeLast(); |
- elements.removeLast(); |
- if (contexts.isEmpty) { |
- return limit; |
- } |
- } |
- } |
- |
- @override |
- Parser copy() => new GreedyRepeatingParser(_delegate, _limit, _min, _max); |
-} |
- |
-/** |
- * A lazy repeating parser, commonly seen in regular expression implementations. It |
- * limits its consumption to meet the 'limit' condition as early as possible. |
- */ |
-class LazyRepeatingParser extends LimitedRepeatingParser { |
- LazyRepeatingParser(Parser parser, Parser limit, int min, int max) |
- : super(parser, limit, min, max); |
- |
- @override |
- Result parseOn(Context context) { |
- var current = context; |
- var elements = new List(); |
- while (elements.length < _min) { |
- var result = _delegate.parseOn(current); |
- if (result.isFailure) { |
- return result; |
- } |
- elements.add(result.value); |
- current = result; |
- } |
- while (true) { |
- var limit = _limit.parseOn(current); |
- if (limit.isSuccess) { |
- return current.success(elements); |
- } else { |
- if (_max != unbounded && elements.length >= _max) { |
- return limit; |
- } |
- var result = _delegate.parseOn(current); |
- if (result.isFailure) { |
- return limit; |
- } |
- elements.add(result.value); |
- current = result; |
- } |
- } |
- } |
- |
- @override |
- Parser copy() => new LazyRepeatingParser(_delegate, _limit, _min, _max); |
-} |