# HG changeset patch # User Christian Urban # Date 1760087885 -3600 # Node ID 0ffb6e4de10a61e42866f09cd02c2fdaf5b7dd01 # Parent 99e89ad35d76921e62a1d1fc2ad54b877107a487 updated diff -r 99e89ad35d76 -r 0ffb6e4de10a progs/while-arrays/compile_bfc.sc --- 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 // diff -r 99e89ad35d76 -r 0ffb6e4de10a slides/slides02.pdf Binary file slides/slides02.pdf has changed diff -r 99e89ad35d76 -r 0ffb6e4de10a slides/slides02.tex --- 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. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%