http://www.cse.chalmers.se/edu/course/DAT151/
Fire / Canvas / Chalmers studieportal / GU ad (sv) / GU kursplan / GU course description / Course page 2019
TYPE ERROR
and INTERPRETER ERROR
anywhere in stdout
and stderr
.
Lectures take place on Zoom, link see Canvas.
Material: plt = course book, dragon = Dragon book. Slides follow closely the plt book.
Date | Time | Title | Material | |
---|---|---|---|---|
Tue 03/11 | 13-15 | PL Design, Compilation Phases | slides, plt 1, dragon 1, live coding Calc | |
Thu 05/11 | 13-15 | Grammars / BNFC / Hands-on with Lab 1 | slides, plt 2, dragon 2.8.2,4.1-4.3, live coding | |
Tue 10/11 | 13-15 | Formal languages and parsing | slides, plt 3, dragon 3,4, LR-table.txt | |
Thu 12/11 | 13-15 | Theory of lexing | slides, plt 3, dragon 3,4 | |
Mon 16/11 | 23 | Lab 1 deadline | ||
Tue 17/11 | 13-15 | Type checking | slides, plt 4, dragon 5,6, script | |
Thu 19/11 | 13-15 | Interpreting | slides, plt 5, script | |
Tue 24/11 | 13-14 | Hands-on with Lab 2 (Haskell) | lab2 PM script Monads | |
Tue 24/11 | 14-15 | Hands-on with Lab 2 (Java) | ||
Thu 26/11 | 13-15 | Code generation | slides, plt 6, dragon 6,7, script | |
Mon 30/11 | 23 | Lab 2 deadline | ||
Tue 01/12 | 13-14 | Hands-on with Lab 3 (Haskell) | lab3 PM | |
Tue 01/12 | 14-15 | Hands-on with Lab 3 (Java) | ||
Thu 03/12 | 13-15 | Functional programming languages | slides, plt 7, dragon 6.5,7.3, script | |
Tue 08/12 | 13-15 | Type inference and polymorphism | plt 7.7-9, script | |
Thu 10/12 | 13-14 | Hands-on with Lab 4 (Haskell) | live code start finish | |
Thu 10/12 | 14-15 | Hands-on with Lab 4 (Java) | live code start finish | |
Mon 14/12 | 23 | Lab 3 deadline | ||
Tue 15/12 | 13-15 | Dependent types (Agda) | Live coding start stop | |
Thu 17/12 | 13-15 | Preparing for the exam | Training exam Answer Q1 Q1.c Answer Q2-6 | |
2021 | ||||
Fri 08/01 | 23 | Lab 4 deadline | ||
Mon 11/01 | 8.30-12.30 | Exam (Canvas) | ||
Fri 22/01 | 23 | Final lab deadline | all lab returns | |
Thu 08/04 | 8.30-12.30 | First reexam (Canvas) | ||
Thu 26/08 | 14-18 | Second reexam |
The official course schema is in Time Edit.
The aim of the course is to give understanding of how programming languages are designed, documented, and implemented. The course covers the basic techniques and tools needed to write interpreters, and gives a summary introduction to compilation as well. Those who have passed the course should be able to
Andreas Abel, responsible course teacher and examiner.
Mohammad Ahmadpanah (MA), Andreas Lööw (AL), Oskar Abrahamsson (OA), assistants.
Questions regarding this class (organization, content, labs) should be asked publicly on the Canvas forum in the most cases. You are also welcome to answer questions by others. (Don't give away any lab solutions when you ask or answer questions!)
Lab supervision workflow: Start a Zoom meeting and invite your group partner to join. To ask for help, sign up on the Waglys digital waiting list with your 10-digit Zoom ID (as "6435657890" from "https://chalmers.zoom.us/j/6435657890"), so that the TAs know where to find you. Please make sure your meeting does not require password to get in. A TA will join your Zoom meeting as soon as it's your turn.
Day | Time | Supervisors |
---|---|---|
Tue | 15:15-17:00 | OA MA |
Thu | 15:15-17:00 | AL MA |
Fri | 13:15-15:00 | AL OA |
Supervision is available from Tue 03 November till Fri 18 December 2020.
Attendance in these classes is optional. Normally, each student should attend at most one supervised laboration time each week. Since attendance is not compulsory, there may be room for more times. But, if there is lack of room, those who attend their first supervision of the week have priority to get a place and supervisor help.
There will be four laborations, written in pairs. (Individual solutions are accepted per exception, please contact the course responsible.) You have to pass the labs to pass the course. However, the course grade is determined solely by the exam.
The labs are quite substantial, so please set aside at least 30 full working hours (4 full working days) before the deadline. It is recommended to start at least 10 days before the deadline.
It is recommended to use a version control system like git
for
code development. In case you use cloud-based code hosting like e.g.
GitLab
GitHub or
Bitbucket,
make sure your repository is private to not give away your lab
solution. (Along the same lines, never post your solution on public
fora and mailing lists!)
Reporting is done via Fire. Before submitting your solution, run your program through the provided test suite. Also, make sure that your submission contains all necessary files and the build succeeds. For instance, if you are submitting an archive, unpack the archive in a fresh directory and check the build there.
We guarantee two gradings per lab: one for the version submitted before the ordinary deadline for that lab, the other for a resubmission before the final deadline. If your first submission does not build or does not pass the testsuite, you will just get fails testsuite as grading.
Note: You have to submit something by the first deadline, otherwise Fire will not allow a (re)submission for the final deadline. (In the worst case, if you absolutely did not manage to work on the lab before the first deadline, submit an empty solution.)
As part of the grading, you may be asked to explain your solution in person to a course teacher. Be prepared to get a call for such an explanation meeting. In particular, make sure you understand all parts of the solution (good documentation helps!).
The written exam determines the course grade, the usual grading scales apply: Chalmers: 5, 4, 3, U; Gothenburg University: VG, G, U.
Exam dates: 11 Jan 2021 am J, 08 Apr 2021 am J, 26 Aug 2021 pm J.
The exam tests the understanding of the course contents from a more high-level view, e.g., the underlying theoretical concepts. The exam has the same structure as these old exams (download as archive).
Further, here are some exercises and solutions to prepare for the exam.
The main book will be one that developed from earlier editions of this course:
If you are really interested in the topic, for instance, if you want to continue with the Compiler Construction course, you should also consider the Dragon book,
Both books are available at web bookshops. The main book will also be sold at Cremona.
A good (yet slightly dated) introduction to monads in Haskell, useful for implementing interpreters, type checkers, and compilers, is this article:
It also contains an introduction to parser combinators.
BNF Converter 2.8 http://bnfc.digitalgrammars.com/ | Hackage | Stackage | GitHub
The latest version of BNFC (2.8.4) can be installed following these instructions.
When using the Java backend, you will need either ANTLR or the CUP libraries and either JFLex or the JLex libraries. CUP has seen incompatible changes in its interface; thus, the version you need may depend on your BNFC version.
Download the JAVA archives for
CUP v11b,
CUP v11b runtime, and
JLex.
Make sure they are placed in your classpath, for example (Linux / macOS)
by storing these jars in
$HOME/java-lib/
and adding the following line (or a suitable variant) to .bashrc
(could also be .bash_profile
or similar):
export CLASSPATH=.:${HOME}/java-lib/java-cup-11b.jar:${HOME}/java-lib/java-cup-11b-runtime.jar:${HOME}/java-lib/JLex-1.2.6.jar:${CLASSPATH}
You can download pre-compiled versions here.
Make sure they are placed in your classpath, for example (Linux / macOS)
by extracting to ~/javatools/
adding the following to .bashrc
:
export CLASSPATH=.:~/javatools/:~/javatools/Cup/:${CLASSPATH}
On Debian-style Linux (like Ubuntu), the following now also works to install these libaries:
sudo apt install jlex cup
Then the class path needs to be set as follows (bash):
export CLASSPATH=.:/usr/share/java/JLex.jar:/usr/share/java/cup.jar
Student representatives for DAT151 Programming language technology.
Program | @student.chalmers.se | Name | |
---|---|---|---|
MPALG | willim | Daniel Willim |