--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/2024/ontime/mk_cw2 Mon Feb 03 12:31:28 2025 +0000
@@ -0,0 +1,47 @@
+#!/bin/bash
+###set -e
+
+trap "exit" INT
+
+files=${1:-assignment*}
+
+
+for sd in $files; do
+ echo -e "\n"
+ echo $sd/cw2/cw02.sc
+ if test -f $sd/cw2/cw02.sc; then
+ echo -e " FILE EXITS\n"
+ cd $sd/cw2
+ if test -f ../DONE2.txt; then
+ echo "DONE2.txt file exists."
+ cat ../DONE2.txt
+ else
+ touch .
+ cp ../../../../cw2_marking/cw2_test.sh .
+ cp ../../../../cw2_marking/c.sc .
+ cp ../../../../cw2_marking/c1.sc .
+ cp ../../../../cw2_marking/c1a.sc .
+ cp ../../../../cw2_marking/c2.sc .
+ cp ../../../../cw2_marking/c{3,4,5}.sc .
+ cp ../../../../cw2_marking/c{3,4}_add.sc .
+ cp ../../../../cw2_marking/*.while .
+ #rm -rf /Users/cu/.ammonite/cache/3.0.0-M2/*
+ ./cw2_test.sh output
+ rm cw2_test.sh
+ rm c.sc
+ rm c1.sc
+ rm c1a.sc
+ rm c2.sc
+ rm c{3,4,5}.sc
+ rm c{3,4}_add.sc
+ rm *.while
+ fi
+ cd ..
+ cd ..
+ else
+ echo -e " FILE cw02.sc DOES NOT EXITS\n"
+ echo -e " FILE cw02.sc DOES NOT EXITS\n 0.0" > $sd/DONE2.txt
+ fi
+done
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/2024/ontime/mk_cw3 Mon Feb 03 12:31:28 2025 +0000
@@ -0,0 +1,43 @@
+#!/bin/bash
+###set -e
+
+trap "exit" INT
+
+files=${1:-assignment*}
+
+
+for sd in $files; do
+ echo -e "\n"
+ echo $sd/cw3/cw03.sc
+ if test -f $sd/cw3/cw03.sc; then
+ #echo -e " FILE EXITS\n"
+ cd $sd/cw3
+ if test -f ../DONE3.txt; then
+ echo "DONE3.txt file exists."
+ cat ../DONE3.txt
+ else
+ touch .
+ cp ../../../../cw3_marking/cw3_test.sh .
+ cp ../../../../cw3_marking/c.sc .
+ cp ../../../../cw3_marking/c{3,4,5}.sc .
+ cp ../../../../cw3_marking/c{3,4}_add.sc .
+ cp ../../../../cw3_marking/c4_pre.sc .
+ cp ../../../../cw3_marking/*.while .
+ #rm -rf /Users/cu/.ammonite/cache/3.0.0-M2/*
+ ./cw3_test.sh output
+ rm cw3_test.sh
+ rm c.sc
+ rm c{3,4,5}.sc
+ rm c{3,4}_add.sc
+ rm c4_pre.sc
+ rm *.while
+ fi
+ cd ..
+ cd ..
+ else
+ echo -e " FILE cw03.sc DOES NOT EXITS\n"
+ echo -e " FILE cw03.sc DOES NOT EXITS\n 0.0" > $sd/DONE3.txt
+ fi
+done
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/2024/ontime/mk_cw4 Mon Feb 03 12:31:28 2025 +0000
@@ -0,0 +1,41 @@
+#!/bin/bash
+###set -e
+
+trap "exit" INT
+
+files=${1:-assignment*}
+
+
+for sd in $files; do
+ echo -e "\n"
+ echo $sd/cw4/cw04.sc
+ if test -f $sd/cw4/cw04.sc; then
+ echo -e " FILE EXITS\n"
+ cd $sd/cw4
+ if test -f ../DONE4.txt; then
+ echo "DONE4.txt file exists."
+ cat ../DONE4.txt
+ else
+ touch .
+ cp ../../../../cw4_marking/cw4_test.sh .
+ cp ../../../../cw4_marking/c.sc .
+ cp ../../../../cw4_marking/c{1,2,3,4}.sc .
+ cp ../../../../cw4_marking/c1_add.sc .
+ cp ../../../../cw4_marking/*.while .
+ #rm -rf /Users/cu/.ammonite/cache/3.0.0-M2/*
+ ./cw4_test.sh output
+ rm cw4_test.sh
+ rm c.sc
+ rm c{1,2,3,4}.sc
+ rm c1_add.sc
+ rm *.while
+ fi
+ cd ..
+ cd ..
+ else
+ echo -e " FILE cw04.sc DOES NOT EXITS\n"
+ echo -e " FILE cw04.sc DOES NOT EXITS\n 0.0" > $sd/DONE4.txt
+ fi
+done
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/2024/ontime/mk_cw5 Mon Feb 03 12:31:28 2025 +0000
@@ -0,0 +1,43 @@
+#!/bin/bash
+###set -e
+
+trap "exit" INT
+
+files=${1:-assignment*}
+
+
+for sd in $files; do
+ echo -e "\n"
+ echo $sd/cw5/cw05.sc
+ if test -f $sd/cw5/cw05.sc; then
+ echo -e " FILE EXITS\n"
+ cd $sd/cw5
+ if test -f ../DONE5.txt; then
+ echo "DONE5.txt file exists."
+ cat ../DONE5.txt
+ else
+ touch .
+ cp ../../../../cw5_marking/cw5_test.sh .
+ cp ../../../../cw5_marking/c.sc .
+ cp ../../../../cw5_marking/c{1,2,3,4,5,6}.sc .
+ cp ../../../../cw5_marking/c{1,2,3}_add.sc .
+ cp ../../../../cw5_marking/*.fun .
+ cp ../../../../cw5_marking/mand.out .
+ #rm -rf /Users/cu/.ammonite/cache/3.0.0-M2/*
+ ./cw5_test.sh output
+ rm cw5_test.sh
+ rm c.sc
+ rm c{1,2,3,4,5,6}.sc
+ rm c{1,2,3}_add.sc
+ rm *.fun
+ #rm mand.out
+ fi
+ cd ..
+ cd ..
+ else
+ echo -e " FILE cw05.sc DOES NOT EXITS\n"
+ echo -e " FILE cw05.sc DOES NOT EXITS\n 0.0" > $sd/DONE5.txt
+ fi
+done
+
+
--- a/Admin/feedback Fri Nov 29 18:59:32 2024 +0000
+++ b/Admin/feedback Mon Feb 03 12:31:28 2025 +0000
@@ -1,3 +1,13 @@
+===============
+2024/25
+
+The CFL module went well this year despite the high number of students (153). This complicated matters with feedback for coursework and homework. Discussing the solutions for homework in SGTs seems to have been liked by students. Unfortunately, we do not yet know what the impact is of collating all courseworks into a single deadline. But again the students seem to have liked the reduction of the coursework by dropping CW1. But overall the students were satisfied with the module quality and the lecturer: an astounding 95% of the received responses either strongly agreed or agreed with being satisfied with the quality of the module; 87.8% found the module intellectually stimulating and 75.8% found the pace of the lectures about right. Of course I will work hard to maintain, and possibly even improve upon, such a favourable view. One area which needs improvement is that only 74.2% of the students feel part of the "CFL community" (a decrease from previous years). I will look into this problem for the next year.
+
+Students generally liked the material with a good mix of theory and practice. Also students appreciated very much the setup of coursework and homework, where the module content could be practiced. Furthermore students found the provided study material very useful.
+
+===============
+
+
The CFL module went very well this year. There was an unanticipated
increase in student numbers from 33 last year to 93 students this
year. This complicated matters with individual feedback for coursework
@@ -21,7 +31,6 @@
high next year as they have been this year.
-
The complete feedback about positive aspects and recommended improvements:
Binary file cws/cw02.pdf has changed
--- a/cws/cw02.tex Fri Nov 29 18:59:32 2024 +0000
+++ b/cws/cw02.tex Mon Feb 03 12:31:28 2025 +0000
@@ -60,7 +60,7 @@
\texttt{else},
\texttt{do},
\texttt{for},
-\texttt{to},
+\texttt{upto},
\texttt{true},
\texttt{false},
\texttt{read},
--- a/hws/build.sc Fri Nov 29 18:59:32 2024 +0000
+++ b/hws/build.sc Mon Feb 03 12:31:28 2025 +0000
@@ -43,3 +43,22 @@
println(os.proc("hg", "commit", "-m texupdate", files ++ pdf_files).call())
println(os.proc("hg", "push").call())
}
+
+// extensions of files to be deleted
+val todelete =
+ List("fdb_latexmk",
+ "log",
+ "aux",
+ "xdv",
+ "out",
+ "fls")
+
+
+@main
+def clean() = {
+ for (f <- os.list.stream(os.pwd) if todelete.contains(f.ext)) {
+ println(s"Delete: ${f.last}")
+ os.remove(f)
+ }
+}
+
--- a/progs/fun/fun_llvm.sc Fri Nov 29 18:59:32 2024 +0000
+++ b/progs/fun/fun_llvm.sc Mon Feb 03 12:31:28 2025 +0000
@@ -1,5 +1,5 @@
// A Small LLVM Compiler for a Simple Functional Language
-// (includes an external lexer and parser)
+// (includes a lexer and parser)
//
//
// call with
@@ -41,12 +41,12 @@
// ./a.out
-//> using toolkit 0.5.0
+// > using toolkit 0.5.0
// > using file fun_tokens.scala
// > using file fun_parser.scala
-//import $file.fun_tokens, fun_tokens._
-//import $file.fun_parser, fun_parser._
+import $file.fun_tokens, fun_tokens._
+import $file.fun_parser, fun_parser._
// for generating new labels
@@ -143,7 +143,7 @@
}
//initial continuation
-def CPSi(e: Exp) = CPS(e)(KReturn)
+def CPSi(e: Exp) = CPS(e)(KReturn(_))
--- a/progs/fun/fun_parser.sc Fri Nov 29 18:59:32 2024 +0000
+++ b/progs/fun/fun_parser.sc Mon Feb 03 12:31:28 2025 +0000
@@ -108,9 +108,9 @@
// Abstract syntax trees for the Fun language
-abstract class Exp extends Serializable
-abstract class BExp extends Serializable
-abstract class Decl extends Serializable
+abstract class Exp
+abstract class BExp
+abstract class Decl
case class Def(name: String, args: List[String], body: Exp) extends Decl
case class Main(e: Exp) extends Decl
--- a/progs/parser-combinators/comb2.sc Fri Nov 29 18:59:32 2024 +0000
+++ b/progs/parser-combinators/comb2.sc Mon Feb 03 12:31:28 2025 +0000
@@ -14,7 +14,7 @@
// it allows writing nested patterns as
// case x ~ y ~ z => ...
-case class ~[+A, +B](x: A, y: B)
+case class ~[+A, +B](x: A, y: B)
// to make sure the input has an empty-method
trait IsSeq[I] {
@@ -34,7 +34,7 @@
if tl.isEmpty) yield hd
// alternative parser
- def ||(q: => Parser[I, T]) : Parser[I, T] = Parser[I, T] {
+ def ||(q: => Parser[I, T]) : Parser[I, T] = new Parser[I, T] {
def parse(in: I) = p.parse(in) ++ q.parse(in)
}
Binary file slides/slides03.pdf has changed
--- a/slides/slides03.tex Fri Nov 29 18:59:32 2024 +0000
+++ b/slides/slides03.tex Mon Feb 03 12:31:28 2025 +0000
@@ -184,7 +184,7 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% @@@@@@@@@@@@@@@@@
-\end{document}
+%\end{document}
% @@@@@@@@@@@@@@@@@@
Binary file slides/slides10.pdf has changed
--- a/slides/slides10.tex Fri Nov 29 18:59:32 2024 +0000
+++ b/slides/slides10.tex Mon Feb 03 12:31:28 2025 +0000
@@ -52,9 +52,10 @@
\begin{center}
\begin{tabular}{ll}
Email: & christian.urban at kcl.ac.uk\\
- Office Hour: & Thurdays 15 -- 16\\
- Location: & N7.07 (North Wing, Bush House)\\
- Slides \& Progs: & KEATS\\
+ %%Office Hour: & Thurdays 15 -- 16\\
+ %%Location: & N7.07 (North Wing, Bush House)\\
+ Slides \& Progs: & KEATS\\
+ Emails: & I will try to stay on top of my inbox during Christmas\medskip\\
Pollev: & \texttt{\alert{https://pollev.com/cfltutoratki576}}\\
\end{tabular}
\end{center}