updated default tip
authorChristian Urban <christian.urban@kcl.ac.uk>
Fri, 10 Oct 2025 10:18:05 +0100
changeset 1005 0ffb6e4de10a
parent 1004 99e89ad35d76
updated
progs/while-arrays/compile_bfc.sc
slides/slides02.pdf
slides/slides02.tex
--- a/progs/while-arrays/compile_bfc.sc	Wed Oct 08 16:52:45 2025 +0100
+++ b/progs/while-arrays/compile_bfc.sc	Fri Oct 10 10:18:05 2025 +0100
@@ -25,8 +25,8 @@
 // compile_arrays.sc (no peephole optimisations)
 // compile_arrays2.sc (peephole optimisations applied)
 
-//> using file compile_arrays.sc
-import compile_arrays.*
+//> using file compile_arrays2.sc
+import compile_arrays2.*
 
 def time_needed[T](i: Int, code: => T) = {
   val start = System.nanoTime()
@@ -192,6 +192,7 @@
   case '.' => "x := mem[ptr]; write x;"
   case '['  => "while (mem[ptr] != 0) do {"
   case ']'  => "skip};"
+  case '0' => "mem[ptr] := 0;"
   case _ => ""
 }
 
@@ -249,6 +250,7 @@
 def bf_run(prog: String, name: String) = {
   println(s"BF pre-processing of $name")
   val bf_string = bf_str(prog)
+  os.write.over(os.pwd / s"$name.while", bf_string)
   println(s"BF parsing (program length ${bf_string.length} characters)")
   val (time, bf_prog) = 
     time_needed(1, fastparse.parse(bf_string, implicit p  => Stmts).get.value)
@@ -320,10 +322,10 @@
 def all() = { bfc0(); bfc1(); bfc2(); bfc3(); bfc4() } 
 
 //all()
-bfc4()
+//bfc4()
 
-
-
+def donut() = bf_run(read(pwd / "donut.bf"), "donut")
+donut()
 
 // old way to run it with Ammonite
 //
Binary file slides/slides02.pdf has changed
--- a/slides/slides02.tex	Wed Oct 08 16:52:45 2025 +0100
+++ b/slides/slides02.tex	Fri Oct 10 10:18:05 2025 +0100
@@ -95,6 +95,49 @@
 \mbox{}
 \end{frame}
 
+{
+\setbeamercolor{background canvas}{bg=cream}
+\begin{frame}<1-2>[c]
+\end{frame}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[t]
+
+\mbox{}\\[-20mm]\mbox{}
+
+\tt
+\begin{center}\large
+\code{"if x = 42 then x := x + 1 else x := x - 1"}
+\end{center}\small
+
+
+\begin{tabular}{@{}l}
+KEYWORD: \\
+\hspace{5mm}{if}, {then}, {else},\ldots\\ 
+WHITESPACE:\\
+\hspace{5mm}{" "}, {$\backslash$n}, {$\backslash$r}\\ 
+IDENTIFIER:\\
+\hspace{5mm}LETTER $\cdot$ (LETTER + DIGIT + {\_})$^*$\\ 
+NUM:\\
+\hspace{5mm}(NONZERODIGIT $\cdot$ DIGIT$^*$) + {0}\\
+NUMBER:\\
+\hspace{5mm}NUM +  (\texttt{"-"} $\cdot$ NUM)\\
+OP:\\
+\hspace{5mm}+, -, *, \%, <, =<,\ldots\\
+COMMENTS:\\
+\hspace{5mm}{$\slash$*} $\cdot$ $\sim$(ALL$^*$ $\cdot$ (*$\slash$) $\cdot$ ALL$^*$) $\cdot$ {*$\slash$}
+\end{tabular}
+
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
+
+{
+\setbeamercolor{background canvas}{bg=cream}
+\begin{frame}<1-4>[c]
+\end{frame}
+}
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \begin{frame}[t]
   \frametitle{
@@ -408,53 +451,13 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[c]
-
-\bl{$r ::= \ZERO \,\;|\;\, \ONE \,\;|\;\, c \,\;|\;\, r_1 + r_2 \,\;|\;\, r_1 \cdot r_2 \,\;|\;\, r^{*} \,\;|\;\, r^{\{n\}}$}  
-
-\end{frame}
+%\begin{frame}[c]
+%
+%\bl{$r ::= \ZERO \,\;|\;\, \ONE \,\;|\;\, c \,\;|\;\, r_1 + r_2 \,\;|\;\, r_1 \cdot r_2 \,\;|\;\, r^{*} \,\;|\;\, r^{\{n\}}$}  
+%
+%\end{frame}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
 
-  
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[c]
-
-\begin{center}
-\begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}}
-\bl{$nullable(\ZERO)$}    & \bl{$\dn$} & \bl{\textit{false}}\\
-\bl{$nullable(\ONE)$}       & \bl{$\dn$} & \bl{\textit{true}}\\
-\bl{$nullable (c)$}             & \bl{$\dn$} & \bl{\textit{false}}\\
-\bl{$nullable (r_1 + r_2)$}     & \bl{$\dn$} & \bl{$nullable(r_1) \vee nullable(r_2)$} \\ 
-\bl{$nullable (r_1 \cdot r_2)$} & \bl{$\dn$} & \bl{$nullable(r_1) \wedge nullable(r_2)$} \\
-\bl{$nullable (r^*)$}           & \bl{$\dn$} & \bl{\textit{true}}\\
-\bl{$nullable (r^{\{n\}})$}      & \bl{$\dn$} & \bl{if $n = 0$ then \textit{true} else $nullable(r)$}\\  
-\end{tabular}
-\end{center}
-
-\end{frame}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[c]
-
-\begin{center}
-\begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {\hspace{-10mm}}l@ {}}
-  \bl{$\der\, c\, (\ZERO)$}      & \bl{$\dn$} & \bl{$\ZERO$} & \\
-  \bl{$\der\, c\, (\ONE)$}           & \bl{$\dn$} & \bl{$\ZERO$} & \\
-  \bl{$\der\, c\, (d)$}                     & \bl{$\dn$} & \bl{if $c = d$ then $\ONE$ else $\ZERO$} & \\
-  \bl{$\der\, c\, (r_1 + r_2)$}        & \bl{$\dn$} & \bl{$\der\, c\, r_1 + \der\, c\, r_2$} & \\
-  \bl{$\der\, c\, (r_1 \cdot r_2)$}  & \bl{$\dn$}  & \bl{if $nullable (r_1)$}\\
-  & & \bl{then $(\der\,c\,r_1) \cdot r_2 + \der\, c\, r_2$}\\ 
-  & & \bl{else $(\der\, c\, r_1) \cdot r_2$}\\
-  \bl{$\der\, c\, (r^*)$}  & \bl{$\dn$} & \bl{$(\der\,c\,r) \cdot (r^*)$}\\
-
-  \bl{$\der\, c\, (r^{\{n\}})$}  & \bl{$\dn$} & \bl{if $n = 0$ then $\ZERO$ else $(\der\,c\,r) \cdot r^{\{n-1\}}$}\\
-                                                
-  \end{tabular}
-\end{center}
-
-\end{frame}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
 
 
 
@@ -1303,9 +1306,49 @@
 \begin{frame}<1-10>[c]
 \end{frame}
 
+  
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[c]
+
+\begin{center}
+\begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}}
+\bl{$nullable(\ZERO)$}    & \bl{$\dn$} & \bl{\textit{false}}\\
+\bl{$nullable(\ONE)$}       & \bl{$\dn$} & \bl{\textit{true}}\\
+\bl{$nullable (c)$}             & \bl{$\dn$} & \bl{\textit{false}}\\
+\bl{$nullable (r_1 + r_2)$}     & \bl{$\dn$} & \bl{$nullable(r_1) \vee nullable(r_2)$} \\ 
+\bl{$nullable (r_1 \cdot r_2)$} & \bl{$\dn$} & \bl{$nullable(r_1) \wedge nullable(r_2)$} \\
+\bl{$nullable (r^*)$}           & \bl{$\dn$} & \bl{\textit{true}}\\
+\bl{$nullable (r^{\{n\}})$}      & \bl{$\dn$} & \bl{if $n = 0$ then \textit{true} else $nullable(r)$}\\  
+\end{tabular}
+\end{center}
+
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[c]
+
+\begin{center}
+\begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {\hspace{-10mm}}l@ {}}
+  \bl{$\der\, c\, (\ZERO)$}      & \bl{$\dn$} & \bl{$\ZERO$} & \\
+  \bl{$\der\, c\, (\ONE)$}           & \bl{$\dn$} & \bl{$\ZERO$} & \\
+  \bl{$\der\, c\, (d)$}                     & \bl{$\dn$} & \bl{if $c = d$ then $\ONE$ else $\ZERO$} & \\
+  \bl{$\der\, c\, (r_1 + r_2)$}        & \bl{$\dn$} & \bl{$\der\, c\, r_1 + \der\, c\, r_2$} & \\
+  \bl{$\der\, c\, (r_1 \cdot r_2)$}  & \bl{$\dn$}  & \bl{if $nullable (r_1)$}\\
+  & & \bl{then $(\der\,c\,r_1) \cdot r_2 + \der\, c\, r_2$}\\ 
+  & & \bl{else $(\der\, c\, r_1) \cdot r_2$}\\
+  \bl{$\der\, c\, (r^*)$}  & \bl{$\dn$} & \bl{$(\der\,c\,r) \cdot (r^*)$}\\
+
+  \bl{$\der\, c\, (r^{\{n\}})$}  & \bl{$\dn$} & \bl{if $n = 0$ then $\ZERO$ else $(\der\,c\,r) \cdot r^{\{n-1\}}$}\\
+                                                
+  \end{tabular}
+\end{center}
+
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   
 
 
-\end{document}
+%%\end{document}
 % below are slides for proving.
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%