progs/catastrophic.js
author Christian Urban <christian.urban@kcl.ac.uk>
Mon, 29 Jun 2020 22:19:05 +0100
changeset 728 9a251e86c3ee
parent 701 81377a3eb717
permissions -rw-r--r--
updated
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
614
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     1
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     2
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     3
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     4
// A case of catastrophic backtracking in JavaScript/Node.js
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     5
//
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     6
// regex: (a*)*b
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     7
// strings: aa...
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     8
//
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     9
// call with:
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    10
//
701
81377a3eb717 updated
Christian Urban <urbanc@in.tum.de>
parents: 614
diff changeset
    11
//  $> node catastrophic.js 20
614
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    12
//
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    13
// call with timing as:
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    14
//
701
81377a3eb717 updated
Christian Urban <urbanc@in.tum.de>
parents: 614
diff changeset
    15
//  $> time node catastrophic.js 25
614
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    16
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    17
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    18
const args = process.argv[2]
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    19
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    20
var str = 'a'.repeat(args);
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    21
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    22
console.log(str)
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    23
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    24
var re = /^((a)*)*b$/;
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    25
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    26
var res = re.test(str);
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    27
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    28
console.log(res)