updated
authorChristian Urban <urbanc@in.tum.de>
Thu, 07 Dec 2017 12:26:41 +0000
changeset 544 748207ad3ef0
parent 543 16adebf18ef9
child 545 76a98ed71a2a
updated
coursework/cw03.pdf
coursework/cw03.tex
progs/re3.scala
Binary file coursework/cw03.pdf has changed
--- a/coursework/cw03.tex	Wed Dec 06 00:06:37 2017 +0000
+++ b/coursework/cw03.tex	Thu Dec 07 12:26:41 2017 +0000
@@ -26,7 +26,7 @@
 \subsection*{Question 1}
 
 Design a grammar for the WHILE language and give the grammar
-rules. The main categories of non-terminal should be:
+rules. The main categories of non-terminals should be:
 
 \begin{itemize}
 \item arithmetic expressions (with the operations from the
--- a/progs/re3.scala	Wed Dec 06 00:06:37 2017 +0000
+++ b/progs/re3.scala	Thu Dec 07 12:26:41 2017 +0000
@@ -11,12 +11,6 @@
 case class SEQ(r1: Rexp, r2: Rexp) extends Rexp 
 case class STAR(r: Rexp) extends Rexp 
 case class NTIMES(r: Rexp, n: Int) extends Rexp 
-case class CSET(cs: Set[Char]) extends Rexp
-case class CFUN(f: Char => Bool) extends Rexp
-
-CSET(('a' to 'z').toSet)
-
-val CSET2(cs: Set[Char]) = CFUN((c:Char) => cs.contains(c))
 
 
 // nullable function: tests whether the regular 
@@ -79,8 +73,8 @@
 
 // Test Cases
 
-//evil regular expressions
-def EVIL1(n: Int) = SEQ(NTIMEemacs re3S(OPT(CHAR('a')), n), NTIMES(CHAR('a'), n))
+//evil regular expressions: (a?){n} a{n}  and (a*)* b
+def EVIL1(n: Int) = SEQ(NTIMES(OPT(CHAR('a')), n), NTIMES(CHAR('a'), n))
 val EVIL2 = SEQ(STAR(STAR(CHAR('a'))), CHAR('b'))
 
 
@@ -133,3 +127,19 @@
 size(ders("aaa".toList, EVIL2))   // 8
 size(ders("aaaa".toList, EVIL2))  // 8
 size(ders("aaaaa".toList, EVIL2)) // 8
+
+
+
+
+
+// Examples from the Sulzmann paper
+val sulzmann = STAR(ALT(ALT(CHAR('a'), CHAR('b')), SEQ(CHAR('a'), CHAR('b'))))
+
+
+for (i <- 1 to 4501 by 500) {
+  println(i + ": " + "%.5f".format(time_needed(1, matcher(sulzmann, "a" * i))))
+}
+
+for (i <- 1 to 4501 by 500) {
+  println(i + ": " + "%.5f".format(time_needed(1, matcher(sulzmann, "ab" * i))))
+}