progs/catastrophic/catastrophic.dart
author Christian Urban <christian.urban@kcl.ac.uk>
Sun, 10 Sep 2023 12:24:55 +0100
changeset 917 89e05a230d2d
parent 777 a10430cb797c
permissions -rw-r--r--
updated

/// A case of catastrophic backtracking in Dart
///---------------------------------------------
/// example provided by Martin Todorov
///
/// regex: (a*)*b
/// strings: aa...a
///
/// run with
///
///    dart catastrophic.dart n


main(List<String> args) {
  final n = int.parse(args[0]);
  final evilRegex = RegExp("(a*)*b");

  for(int i = 1; i <= n; i++) {
    final toMatch = "a" * i;
    final stopwatch = Stopwatch()..start();
    evilRegex.hasMatch(toMatch);
    print("$i a's matched in ${stopwatch.elapsed}");
  }
}