diff -r 48b842c997c7 -r 9e42ccbbd1e6 progs/re1.scala --- a/progs/re1.scala Wed Mar 15 14:34:10 2017 +0000 +++ b/progs/re1.scala Wed Mar 22 14:10:01 2017 +0000 @@ -77,6 +77,7 @@ (end - start)/(i * 1.0e9) } + //test: (a?{n}) (a{n}) for (i <- 1 to 20) { println(i + ": " + "%.5f".format(time_needed(2, matches(EVIL1(i), "a" * i)))) @@ -115,3 +116,23 @@ size(EVIL1(3)) // 17 size(EVIL1(5)) // 29 size(EVIL1(7)) // 41 + + +// given a regular expression and building successive +// derivatives might result into bigger and bigger +// regular expressions...here is an example for this: + +val BIG_aux = STAR(ALT(CHAR('a'), CHAR('b'))) +val BIG = SEQ(BIG_aux, SEQ(CHAR('a'),SEQ(CHAR('b'), BIG_aux))) + +size(ders("".toList, BIG)) // 13 +size(ders("ab".toList, BIG)) // 51 +size(ders("abab".toList, BIG)) // 112 +size(ders("ababab".toList, BIG)) // 191 +size(ders("abababab".toList, BIG)) // 288 +size(ders("ababababab".toList, BIG)) // 403 +size(ders("abababababab".toList, BIG)) // 536 + + +size(ders(("ab" * 200).toList, BIG)) // 366808 +