--- 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
//
--- 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.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%