updated
authorChristian Urban <christian.urban@kcl.ac.uk>
Mon, 30 Aug 2021 14:18:08 +0100
changeset 826 b0352633bf48
parent 825 dca072e2bb7d
child 827 67c8a6e6a305
updated
progs/fun2/sqr.ll
progs/lexer/lexer.sc
progs/matcher/re1.sc
progs/matcher/re2.sc
progs/matcher/re3.sc
progs/matcher/re4.sc
slides/slides01.pdf
slides/slides01.tex
--- a/progs/fun2/sqr.ll	Thu May 13 13:10:38 2021 +0100
+++ b/progs/fun2/sqr.ll	Mon Aug 30 14:18:08 2021 +0100
@@ -36,6 +36,7 @@
 }
 
 ; END OF BUILD-IN FUNCTIONS (prelude)
+
 @Max = global i32 10
 
 define i32 @sqr (i32 %x) {
--- a/progs/lexer/lexer.sc	Thu May 13 13:10:38 2021 +0100
+++ b/progs/lexer/lexer.sc	Mon Aug 30 14:18:08 2021 +0100
@@ -143,9 +143,7 @@
   (v:Val) => Sequ(f1(Empty), f2(v))
 def F_SEQ_Empty2(f1: Val => Val, f2: Val => Val) = 
   (v:Val) => Sequ(f1(v), f2(Empty))
-def F_RECD(f: Val => Val) = (v:Val) => v match {
-  case Rec(x, v) => Rec(x, f(v))
-}
+
 def F_ERROR(v: Val): Val = throw new Exception("error")
 
 // simplification
--- a/progs/matcher/re1.sc	Thu May 13 13:10:38 2021 +0100
+++ b/progs/matcher/re1.sc	Mon Aug 30 14:18:08 2021 +0100
@@ -7,6 +7,8 @@
 // or 
 //
 //   amm re1.sc all
+//
+
  
 // regular expressions
 abstract class Rexp
@@ -96,7 +98,7 @@
 
 
 // test: (a?{n}) (a{n})
-@doc("Test (a?{n}) (a{n})")
+@arg(doc = "Test (a?{n}) (a{n})")
 @main
 def test1() = {
   println("Test (a?{n}) (a{n})")
@@ -107,7 +109,7 @@
 }
 
 // test: (a*)* b
-@doc("Test (a*)* b")
+@arg(doc = "Test (a*)* b")
 @main
 def test2() = {
   println("Test (a*)* b")
@@ -158,7 +160,7 @@
 
 size(ders(("ab" * 200).toList, BIG))    // 366808
 
-@doc("Test (a + b)* o (a o b) o (a + b)*")
+@arg(doc = "Test (a + b)* o (a o b) o (a + b)*")
 @main
 def test3() = {
   println("Test (a + b)* o (a o b) o (a + b)*")
@@ -171,6 +173,10 @@
 
 
 
-@doc("All tests.")
+@arg(doc = "All tests.")
 @main
 def all() = { test1(); test2() ; test3() } 
+
+
+
+// runs with amm2 and amm3
--- a/progs/matcher/re2.sc	Thu May 13 13:10:38 2021 +0100
+++ b/progs/matcher/re2.sc	Mon Aug 30 14:18:08 2021 +0100
@@ -74,7 +74,7 @@
 
 
 
-@doc("Test (a?{n}) (a{n})")
+@arg(doc = "Test (a?{n}) (a{n})")
 @main
 def test1() = {
   println("Test (a?{n}) (a{n})")
@@ -85,7 +85,7 @@
 }  
 
 
-@doc("Test (a*)* b")
+@arg(doc = "Test (a*)* b")
 @main
 def test2() = {
   println("Test (a*)* b")
@@ -141,6 +141,11 @@
 
 
 
-@doc("All tests.")
+@arg(doc = "All tests.")
 @main
 def all() = { test1(); test2() } 
+
+
+
+
+// runs with amm2 and amm3
--- a/progs/matcher/re3.sc	Thu May 13 13:10:38 2021 +0100
+++ b/progs/matcher/re3.sc	Mon Aug 30 14:18:08 2021 +0100
@@ -96,8 +96,7 @@
 }
 
 
-//
-//@doc("Test (a?{n}) (a{n})")
+@arg(doc = "Test (a?{n}) (a{n})")
 @main
 def test1() = {
   println("Test (a?{n}) (a{n})")
@@ -107,8 +106,7 @@
   }
 }  
 
-//
-//@doc("Test (a*)* b")
+@arg(doc = "Test (a*)* b")
 @main
 def test2() = {
   println("Test (a*)* b")
@@ -141,7 +139,7 @@
 size(ders("aaaaa".toList, EVIL2)) // 8
 
 
-@doc("All tests.")
+@arg(doc = "All tests.")
 @main
 def all() = { test1(); test2() } 
 
@@ -149,28 +147,43 @@
 
 
 
+// PS:
+//
+// If you want to dig deeper into the topic, you can have 
+// a look at these examples which still explode. They
+// need an even more aggressive simplification.
+
 // test: (a + aa)*
 val EVIL3 = STAR(ALT(CHAR('a'), SEQ(CHAR('a'), CHAR('a'))))
 
-// test: (1 + a + aa)*
-val EVIL4 = STAR(ALT(ONE, ALT(CHAR('a'), SEQ(CHAR('a'), CHAR('a')))))
 
-@doc("Test Evil3")
+@arg(doc = "Test EVIL3")
 @main
 def test3() = {
   println("Test (a + aa)*")
 
-  for (i <- 0 to 35 by 5) {
+  for (i <- 0 to 30 by 5) {
     println(f"$i: ${time_needed(1, matcher(EVIL3, "a" * i))}%.5f")
   }
 }
 
-@doc("Test Evil4")
+
+// test: (1 + a + aa)*
+val EVIL4 = STAR(ALT(ONE, ALT(CHAR('a'), SEQ(CHAR('a'), CHAR('a')))))
+
+@arg(doc = "Test EVIL4")
 @main
 def test4() = {
   println("Test (1 + a + aa)*")
 
-  for (i <- 0 to 35 by 5) {
+  for (i <- 0 to 30 by 5) {
     println(f"$i: ${time_needed(1, matcher(EVIL4, "a" * i))}%.5f")
   }
 }
+
+@arg(doc = "Tests that show not all is hunky-dory, but a solution leads too far afield.")
+@main
+def fail() = { test3(); test4() } 
+
+
+// runs with amm2 and amm3
--- a/progs/matcher/re4.sc	Thu May 13 13:10:38 2021 +0100
+++ b/progs/matcher/re4.sc	Mon Aug 30 14:18:08 2021 +0100
@@ -1,4 +1,4 @@
-// (ASIDE!) A version which attempts to move whole strings, 
+// (ASIDE!) A version which attempts to move entire strings, 
 // not just characters, under derivatives whenever possible
 //    
 // call the test cases with X = {1,2}
@@ -106,8 +106,7 @@
 }
 
 
-// test: (a?{n}) (a{n})
-@doc("Test (a?{n}) (a{n})")
+@arg(doc = "Test (a?{n}) (a{n})")
 @main
 def test1() = {
   for (i <- 0 to 11000 by 1000) {
@@ -115,8 +114,7 @@
   }
 }
 
-// test: (a*)* b
-@doc("Test (a*)* b")
+@arg(doc = "Test (a*)* b")
 @main
 def test2() = {
   for (i <- 0 to 7000000 by 500000) {
@@ -124,7 +122,7 @@
   }
 } 
 
-@doc("All tests.")
+@arg(doc = "All tests.")
 @main
 def all() = { test1(); test2() } 
 
@@ -163,3 +161,7 @@
 // test: ("" | "a" | "aa")*
 val EVIL4 = STAR(ALT(ONE, ALT(CHAR('a'), SEQ(CHAR('a'), CHAR('a')))))
 
+
+
+
+// runs with amm2 and amm3
Binary file slides/slides01.pdf has changed
--- a/slides/slides01.tex	Thu May 13 13:10:38 2021 +0100
+++ b/slides/slides01.tex	Mon Aug 30 14:18:08 2021 +0100
@@ -32,6 +32,7 @@
 \begin{document}
 
 %\begin{frame}[t]
+%
 %\begin{mybox}
 %A physical explanation the \emph{dynamic matrix}\\
 %lots of text
@@ -55,7 +56,7 @@
   \begin{tabular}{@ {}c@ {}}
   \\[-3mm]
   \LARGE Compilers and \\[-1mm] 
-  \LARGE Formal Languages\\[-3mm] 
+  \LARGE FFFormal Languages\\[-3mm] 
   \end{tabular}}
 
   \begin{center}