{"id":43387350,"url":"https://github.com/teach-plt/www","last_synced_at":"2026-02-02T11:50:07.732Z","repository":{"id":200760549,"uuid":"622175523","full_name":"teach-plt/www","owner":"teach-plt","description":"Webpages of course Programming Language Technology","archived":false,"fork":false,"pushed_at":"2026-01-13T14:06:47.000Z","size":16151,"stargazers_count":8,"open_issues_count":4,"forks_count":1,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-01-13T16:52:40.051Z","etag":null,"topics":["bnfc","compiler","course","haskell","interpreter","java","parser","type-checker"],"latest_commit_sha":null,"homepage":"https://teach-plt.github.io/www/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/teach-plt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-04-01T10:50:03.000Z","updated_at":"2026-01-13T14:06:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"42179ab0-c00b-4f28-a9de-438ac2e51843","html_url":"https://github.com/teach-plt/www","commit_stats":null,"previous_names":["teach-plt/www"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/teach-plt/www","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teach-plt%2Fwww","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teach-plt%2Fwww/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teach-plt%2Fwww/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teach-plt%2Fwww/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/teach-plt","download_url":"https://codeload.github.com/teach-plt/www/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/teach-plt%2Fwww/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29011666,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-02T10:37:29.253Z","status":"ssl_error","status_checked_at":"2026-02-02T10:37:28.644Z","response_time":58,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bnfc","compiler","course","haskell","interpreter","java","parser","type-checker"],"created_at":"2026-02-02T11:50:07.037Z","updated_at":"2026-02-02T11:50:07.718Z","avatar_url":"https://github.com/teach-plt.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"---\ntitle: Programming Language Technology\nsubtitle: DAT151 (Chalmers) / DIT231 (GU)\ndate: Winter Term 2025 (LP2)\n---\n\n\u003clink rel=\"stylesheet\" href=\"gh-fork-ribbon.css\" /\u003e\n\u003cstyle\u003e.github-fork-ribbon:before { background-color: #333; }\u003c/style\u003e\n\u003ca class=\"github-fork-ribbon\" href=\"https://github.com/teach-plt/www\" data-ribbon=\"Sources on GitHub\" title=\"Sources on GitHub\"\u003eSources on GitHub\u003c/a\u003e\n\n[Canvas](https://chalmers.instructure.com/courses/36705) /\n[GitLab](https://git.chalmers.se/courses/dat151) /\n[Schedule (TimeEdit)](https://cloud.timeedit.net/chalmers/web/public/ri10794Q057Z05Q66065Y755yZ0Q6W9759562Q5.html) /\n[Slack](https://plt2025.slack.com/) ([Join Slack!](https://join.slack.com/t/plt2025/shared_invite/zt-3hapcdtfn-fToy857Q_ELojF7F3Q5WEQ)) /\n[Chalmers studieportal](https://www.student.chalmers.se/sp/course?course_id=40144) /\n[GU ad (sv)](https://www.gu.se/studera/hitta-utbildning/programspraksteknik-dit231) /\n[GU kursplan](http://kursplaner.gu.se/pdf/kurs/sv/DIT231) /\n[GU course description](http://kursplaner.gu.se/pdf/kurs/en/DIT231) /\n[Course page 2022](http://www.cse.chalmers.se/edu/year/2022/course/DAT151/)\n\n# Schedule\n\nLectures are Tuesdays and Thursdays, starting at **13:15**, both on\ncampus in\n**[HC2](http://maps.chalmers.se/#23e2df72-cbb9-4aff-825a-1a282e9618d6)**\nand in\n[Zoom](https://chalmers.instructure.com/courses/36705/external_tools/419).\n**No lecture nor labs on Tue 18 Nov due to [DatE-IT](https://date-it.se/).**\nRecordings of the lectures can be found in the [Canvas Media Gallery](https://chalmers.instructure.com/courses/36705/external_tools/29).\n\nMaterial: plt = course book, dragon = Dragon book. Slides follow closely the plt book.\n\n| Date | Time | Who | Title | Lecture material | Reading material |\n|------|------|-----|-------|------------------|------------------|\n| Tue 04/11 | 13-15 | [AA] | PL Design, Compilation Phases | [live coding](live/2025/live-1-Calc-bnfc.zip) | [slides](plt-book/ipl-book/slides/1-slides-ipl-book.pdf), plt 1, dragon 1, [git](notes/git-primer.html) |\n| Thu 06/11 | 13-15 | [AA] | Grammars / BNFC / Hands-on with Lab 1 | [LBNF syntax summary](notes/bnfc.html) | [slides](plt-book/ipl-book/slides/2-slides-ipl-book.pdf), plt 2, dragon 2.8.2,4.1-4.3 |\n| Tue 11/11 | 13-15 | [AA] | Formal languages, lexing, and parsing | [shift-reduce parsing](notes/sr-states.md), [LR-table](notes/LR-table.html), [lr-demo](https://github.com/teach-plt/lr-demo) | [slides](plt-book/ipl-book/slides/3-slides-ipl-book.pdf), plt 3, dragon 3,4 |\n| Thu 13/11 | 13-15 | [MM] | Type checking | [script](notes/type-checking.html), [transcript 2025-11-13](notes/2025/lec4-type-checking.html) | [slides](plt-book/ipl-book/slides/4-slides-ipl-book.pdf), plt 4, dragon 5,6 |\n| *Mon 17/11* | *23* |     | *Lab 1 deadline* |  |  |\n| Tue 18/11 | 10-17 |      | [DatE-IT](https://date-it.se/), no lecture, no labs |  |\n| Thu 20/11 | 13-15 | [MM] | Interpreting | [new slides](https://www.cse.chalmers.se/~myreen/talks/05-interpreter.pdf), [script](notes/interpreter.html) | [old slides](plt-book/ipl-book/slides/5-slides-ipl-book.pdf), plt 5 |\n| Tue 25/11 | 13-15 |      | *lecture postponed due to illness* |  |\n| Thu 27/11 | 13-14 | [MM] | Hands-on with Lab 2 (Haskell) | [zip of code](https://www.cse.chalmers.se/~myreen/zips/interpreter-live-code.zip) | [script: monadic interpreter](notes/monads.html) |\n| Thu 27/11 | 14-15 | [MM] | Hands-on with Lab 2 (Java) | [script](notes/java.html), [Annotated.java](notes/Annotated.java) |  |\n| Tue 02/12 | 13-15 | [MM] | Code generation + live coding | [zip of code](https://www.cse.chalmers.se/~myreen/zips/live-coding-codegen.zip), [new slides](https://www.cse.chalmers.se/~myreen/talks/07-code-generation.pdf), [script](notes/compilation.html), [prime.c](notes/prime.c), [prime.j](notes/prime.j) | [slides](plt-book/ipl-book/slides/6-slides-ipl-book.pdf), plt 6, dragon 6,7 |\n| *Wed 03/12* | *23* |     | *Lab 2 deadline* |  |\n| Thu 04/12 | 13-15 | [AA] | Functional programming languages | [script](notes/cbn-cbv.html) | [slides](plt-book/ipl-book/slides/7-slides-ipl-book.pdf), plt 7, dragon 6.5,7.3 |\n| Tue 09/12 | 13-15 | [AA] | Type inference and polymorphism | [script](notes/typing.html), [visualization tool](https://github.com/teach-plt/visualize-type-inference) | plt 7.7-9 |\n| Thu 11/12 | 13-14 | [AA] | Hands-on with Lab 4 (Haskell) | [live code](live/2025/lab4/Interpreter.hs) |  |\n| Thu 11/12 | 14-15 | [AA] | Hands-on with Lab 4 (Java)    | [live code](live/2025/lab4/Interpreter.java) |  |\n| Tue 16/12 | 13-15 | [AA] | Dependent types (Agda) | live coding [start](live/2025/agda/JVM-start.agda), [result](live/2025/agda/JVM.agda) |  |\n| *Wed 17/12* | *23* |     | *Lab 3 deadline* |  |  |\n| Thu 18/12 | 13-15 | [AA] | Preparing for the exam | last year's [exam](exams/exam-plt-2025-3.pdf), live [solution](live/2025/exam.md) |  |\n\n|    2026     |               |                      |                   |\n|:-----------:|---------------|----------------------|-------------------|\n| *Mon 12/01* | *23*          | *Lab 4 deadline*     |                   |\n| *Thu 15/01* | *8.30-12.30*  | *Exam*               | [solution](exams/solutions-plt-2026-1.pdf) |\n| *Fri 23/01* | *23*          | *Final lab deadline* | *all lab returns* |\n| *Wed 28/01* | *14.30-15.30* | *Exam review*        | EDIT 6128         |\n| *Mon 31/03* | *23*          | *Reexam lab deadline*|                   |\n| *Thu 09/04* | *8.30-12.30*  | *First reexam*       |                   |\n| *Thu 27/08* | *14-18*       | *Second reexam*      |                   |\n\nThe official course schema is in\n[Time Edit](https://cloud.timeedit.net/chalmers/web/public/ri10794Q057Z05Q66065Y755yZ0Q6W9759562Q5.html).\n\n# Description\n\nThe aim of the course is to give understanding of how programming languages are designed, documented, and implemented.\nThe course covers the basic techniques and tools needed to write interpreters, and gives a summary introduction to compilation as well.\nThose who have passed the course should be able to\n\n1.  define the lexical structure of programming languages by using\n    regular expressions, explain the functioning of finite automata, and\n    implement lexical analysers by using standard tools;\n\n2.  define the syntax of programming languages by using context-free\n    grammars, explain the principles of LL and LR parsing, and implement\n    parsers by using standard tools;\n\n3.  define and implement abstract syntax;\n\n4.  master the technique of syntax-directed translation and its\n    efficient implementation in their chosen programming language;\n\n5.  formulate typing rules and implement type checkers;\n\n6.  formulate operational semantic rules and implement interpreters;\n\n7.  write simple code generators;\n\n8.  be familiar with the basic implementation issues of both imperative\n    and functional languages;\n\n9.  master the principles of polymorphic type checking by unification;\n\n10. implement an interpreter for a functional language.\n\n# Teachers\n\n- [Andreas Abel][AA] ([homepage](https://www.cse.chalmers.se/~abela/)), responsible course teacher and examiner.\n- [Magnus Myréen][MM] ([homepage](https://www.cse.chalmers.se/~myreen/)), course teacher.\n\n[AA]: https://www.chalmers.se/en/persons/abela/\n[MM]: https://www.chalmers.se/en/persons/myreen/\n\nAssistants:\n\n- [András Kovács](https://www.chalmers.se/personer/andrask/)\n- [David Wärn](https://www.chalmers.se/personer/warnd/) ([homepage](https://dwarn.se))\n- [Jeremy Pope](https://www.chalmers.se/en/persons/popje/)\n- [Jonas Höfer](https://www.chalmers.se/personer/hoferj/)\n\nQuestions regarding this class (organization, content, labs) should be asked publicly on the Slack forum in the most cases.\nYou are also welcome to answer questions by others.\nDo not give away any lab solutions when you ask or answer questions!\n\n# Lab supervision\n\nLab supervision is offered in room\n[ED3354](http://maps.chalmers.se/#45ea04d0-4a90-4a18-9842-55599dbbb093)\nand online on Tue, Thu and Fri.\nStarting 12 Nov we offer Zoom-only supervision on Wednesdays 15:15-17:00.\nThe lab rooms and supervision are available from Tue 04 Nov till Fri 19 Dec 2025.\nAttendance is voluntary.\n\n| Day |    Time     | Location     | Supervisors            |\n|:---:|:-----------:|--------------|------------------------|\n| Tue | 15:15-17:00 | Zoom, ED3354 | Andreas, David, Jonas  |\n| Wed | 15:15-17:00 | Zoom         | Jeremy, Jonas          |\n| Thu | 15:15-17:00 | Zoom, ED3354 | Magnus, Andras         |\n| Fri | 13:15-15:00 | Zoom, ED3354 | Andras, Jeremy, David  |\n\nExtra Zoom-only supervision session will be provided:\n- Wed 7 Jan 2026 15:15-17:00 (Jeremy, Jonas)\n- Thu 8 Jan 2026 15:15-17:00 (Andras, David)\n\nWe use [Slack](https://plt2025.slack.com/) to organize the lab supervision. [Please join](https://join.slack.com/t/plt2025/shared_invite/zt-3hapcdtfn-fToy857Q_ELojF7F3Q5WEQ) our Slack workspace and the channel `#queue`.\n\nThe TAs will be present in lab rooms during lab supervision slots, available for help both in-person and virtually.\nTo ask for help, just send a ticket request through the `#queue` Slack channel.\n\n- For in-person attendance, write your name and how to find you (room if not ED3354, number of the PC in front of you (or any other hint how to recognize you)).\n\n- For online help, start a Zoom meeting and invite your group partner to join.\n  Please then sign up by providing a clickable URL to your Zoom meeting (e.g.,\n  `https://chalmers.zoom.us/j/6435657890/pwd=OXlBcGxMZjkzNGsyplpYZENYWlVodi09`),\n  so that the TA knows where to find you.\n\n- Monitor the queue, the TA will join you/your Zoom meeting as soon as it’s your turn.\n\n\n# Labs\n\nYou have to pass the labs to pass the course.\nHowever, the course grade is determined solely by the exam.\n\n- Lab 1 - parser (deadline 17/11)\n- Lab 2 - type checker and interpreter (deadline 03/12)\n- Lab 3 - code generator (deadline 17/12)\n- Lab 4 - functional language interpreter (deadline 11/01/2026)\n\nThe labs are quite substantial, so please set aside at least 30 full working hours (4 full working days) before the deadline.\nIt is recommended to start at least 10 days before the deadline.\n\nLabs are to be solved in **groups of two**. (Individual solutions are accepted per exception, please contact the course responsible.)\nYou are expected to find a lab partner with whom you will do the labs.\nIf you have difficulties finding a partner, please use Slack channel `#lab-partner`.\nGroups are formed on Canvas and then recreated automatically on\n[Chalmers GitLab](https://git.chalmers.se/courses/dat151).\nAfter the first lab has been submitted, the groups are fixed. (Should you nevertheless need to urgently change to group, please contact the course responsible.)\n\nThe labs will be published in your Gitlab group and a solution repository will be created for you there.\nSubmission of your solution is by creating a `submission` tag in the repository.\nPlease read the detailed **lab instructions** at:\n\u003chttps://chalmers.instructure.com/courses/36705/pages/lab-infrastructure-on-chalmers-gitlab\u003e\n\n## Lab grading\n\nWe guarantee two gradings per lab: one for the version submitted before\nthe ordinary deadline for that lab, the other for a resubmission before\nthe final deadline.\nIf your first submission does not build or does not pass the testsuite, you will just get *fails testsuite* as grading.\n\nAs part of the grading, you may be asked to explain your solution in person to a course teacher.\nBe prepared to get a call for such an explanation meeting.\nIn particular, make sure you understand all parts of the solution (good documentation helps!).\n\n## Lab confidentiality\n\nKeep your lab solutions confidential!\n\n- If you post problems and discussions around the labs on Canvas etc., make sure you do not give away the solution.\n- Publishing the solution on the internet (e.g. in a GitHub repo) is **forbidden**.\n- *Even after the course is completed*, publishing remains forbidden, because labs are reused every year.\n\n## AI policy\n\n**Mild use of AI** is permitted when solving the labs.\nFor example:\n\n- You may ask a chatbot to explain some concept or library functions to you.\n- You may use CoPilot (or similar) for code completion in a modest way.\n- You may ask CoPilot (or simliar) to refactor your code.\n\n**Heavy use of AI** (such as _vibe coding_) is not permitted.\nHeavy use of AI jeopardizes your learning experience.\nIt can be regarded as implicit plagiarism from the authors of the code the AI was trained on.\nSome examples of heavy AI use:\n\n- Feeding the lab description into an AI chat (e.g. ChatGPT) and using the produced code.\n- Writing a comment and let AI implement the method/function.\n\nIn any case, you need to disclose AI use in your submission.\nIf you used AI, write a comment explaining the extent of its use:\n\n- What tools did you use?  (E.g. GitHub Copilot for completion, Copilot chat, AI chat XYZ (name the model!))\n- What were they used for?  (E.g. advice on libraries, advice on the problem, refactoring, completing definitions...)\n- Any definitions written with AI help should be labeled as such in a comment.\n\n\n# Exam\n\nThe written exam determines the course grade, the usual grading scales apply:\nChalmers: 5, 4, 3, U;\nGothenburg University: VG, G, U.\n\nExam dates: 15 Jan 2026 am J, 9 Apr 2026 am J, 27 Aug 2026 pm J.\n\nThe exam tests the understanding of the course contents from a more high-level view, e.g., the underlying theoretical concepts.\nThe exam has the same structure as these [old exams](exams/)\n(download as [archive](exams.tgz)).\n\nFurther, here are some old\n[exercises](plt-book/ipl-book/course-exercises/exx.html) and\n[solutions](plt-book/ipl-book/course-exercises/sol.html) to prepare for the exam.\n\n# Literature\n\n1. The main book will be one that developed from earlier editions of this course:\n\n   Aarne Ranta,\n   *Implementing Programming Languages. An Introduction to Compilers and Interpreters*,\n   College Publications, London, 2012.\n   [Web page (with extra material and links to selling sites)](plt-book/ipl-book/)\n\n   Please also check the\n   [errata](https://github.com/andreasabel/plt-errata/) page\n   (welcome to submit errata not covered there yet).\n\n2. If you are really interested in the topic, for instance, if you want to\n   continue with the\n   [Compiler Construction](http://www.cse.chalmers.se/edu/course/TDA283/)\n   course, you should also consider *the Dragon book*,\n\n   Aho, Lam, Sethi \u0026 Ullman,\n   *Compilers Principles, Techniques \u0026 Tools*, **Second edition**,\n   Pearson/Addison Wesley 2007.\n\nBoth books are available at web bookshops. The main book will also be sold at Cremona.\n\nA good (yet slightly dated) introduction to monads in Haskell, useful\nfor implementing interpreters, type checkers, and compilers, is this\narticle:\n\nPhilip Wadler,\n[Monads for functional programming](https://homepages.inf.ed.ac.uk/wadler/papers/marktoberdorf/baastad.pdf).\nIn *Advanced Functional Programming*,\nFirst International Spring School on Advanced Functional Programming Techniques,\nBåstad, Sweden, May 24-30, 1995.\n\nIt also contains an introduction to parser combinators.\n\n# Software\n\nTo solve the labs, you need a developer environment with the following tools.\n\n## General tools\n\nYou need to invoke tools from a [command shell](https://en.wikipedia.org/wiki/Shell_(computing)).\nFor one, the  [make](https://en.wikipedia.org/wiki/Make_(software)) build tool\nand the [git](https://git-scm.com/) version control tool are required.\n- On **Linux**, these are available by default.\n- On **macOS**, you can install them from Xcode (`xcode-select –-install`).\n- On **Windows**, you should install [Git for Windows](https://git-scm.com/downloads/win). This installs Git Bash, a command line shell that mimics Linux and has `git`. It doesn't have `make` by default, so install it as follows:\n  extract [this archive](https://sourceforge.net/projects/ezwinports/files/make-4.4.1-without-guile-w32-bin.zip/download) and copy its contents into `Git\\mingw64\\` in your Git installation location (which is probably in `Program Files`). In the rest of the course, you should generally work in Git Bash.\n\n### Setting `PATH` and other environment variables\n\nTools can be invoked from the shell only if they are in the [`PATH`](https://en.wikipedia.org/wiki/PATH_(variable))\nof your command shell.\nYou can add directories to the search path by setting the `PATH` variable in the initialization script of your shell.  Such scripts are located in your `$HOME` directory.  The name of the initialization script usually contains the name of the shell.\n- E.g. for the Bash: `.bashrc` or `.bash_profile`\n- E.g. for the Zsh: `.zshrc`\n\nAppending the line `export PATH=/absolute/path/to/dir:${PATH}` to the initialization script will add directory `/absolute/path/to/dir` to the front of the `:`-separated list of search paths.\n- On Windows, this list is `;`-separated because `:` is reserved for drive names.\n  Windows also allows to set environment variables globally for a user through the Control Panel.\n\nNote that updates to the initialization script only take effect when the shell is restarted.\n\n\n## Haskell tools\n\nRecent versions of the following Haskell tools need to be installed and in your `PATH`.\n\n- [Haskell Stack](https://docs.haskellstack.org/en/stable/), e.g. version 3.7.1\n- The Haskell compiler [GHC](https://www.haskell.org/ghc/) version 9.6.7\n- BNFC, the [BNF Converter](https://bnfc.digitalgrammars.com/), e.g. version 2.9.6\n- Haskell lexer generator [Alex](https://haskell-alex.readthedocs.io/en/stable/)\n- Haskell parser generator [Happy](https://haskell-happy.readthedocs.io/en/stable/)\n\nWe suggest the following installation.\n\n1. First install [GHCup](https://www.haskell.org/ghcup/).\n   - When asked, answer Yes to adding the ghcup installation directory to PATH.\n   - Also answer Yes to installing `stack`.\n   - On Windows: copy the install script from the GHCup webpage into PowerShell. The installation might take a long time (10+ minutes), apparently because of the Windows Defender antivirus checking the installation very slowly. After this is finished, work in Git Bash for all of the following steps.\n2. You can use `ghcup tui` to review your installed versions of Haskell tools and to install/uninstall them. After installing a tool, you have to \"set\" it to make it visible in your shell. Install and set the latest Stack version, and also GHC 9.6.7.\n3. Use Stack to install the remaining tools.\n   ```\n   stack install alex happy BNFC\n   ```\n   This might alert you in the end that you do not have the installation directory in your system `PATH`; in this case, go and add it there.\n\n4. Verify that these tools are working by querying their version:\n   ```\n   stack --version\n   ghc   --version\n   bnfc  --version\n   alex  --version\n   happy --version\n   ```\n\n## Java\n\nYou need the [java](https://en.wikipedia.org/wiki/Java_(programming_language)) virtual machine in your `PATH`.\n```\njava -version\n```\nWe will use version 21 of Java.\n\nYou might chose to solve the labs in Java.\nIn this case, you need the Java Development Kit (JDK). You can get all neccessary Java dependencies by installing `openjdk-21` (e.g. with a package manager on Linux/macOS or by downloading [here](https://learn.microsoft.com/en-us/java/openjdk/download) on Windows).\nWe publish Java stubs for the labs that use [Gradle build tool](https://gradle.org/), preconfigured to install the Java parser generator [CUP](http://www2.cs.tum.edu/projects/cup/) and the lexer generator [JFLex](https://jflex.de/).  If you use the stubs, there is not need to install Gradle, CUP and JFlex yourself.\n\n# Student representatives\n\n[Student representatives](https://student.portal.chalmers.se/en/chalmersstudies/courseinformation/courseevaluation/Pages/default.aspx)\nfor DAT151 Programming language technology.\n\n| Program | @student.chalmers.se |     Name     |\n|:-------:|:--------------------:|:------------:|\n| MPALG  | ali0408mousa@gmail.com   | Ali Mousa Baqer Al-Muslim |\n| MPSOF  | aoxinyan@gmail.com       | Xinyan Ao                 |\n| MPALG  | matistjati@outlook.com   | Joshua Bergman Andersson  |\n| MPCSN  | hallinal                 | Albin Hallin              |\n\n\u003chr\u003e\n\u003cp\u003e\n\u003ca href=\"https://teach-plt.github.io/www/\"\u003ehttps://teach-plt.github.io/www/\u003c/a\u003e, (C) Andreas Abel 2025\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteach-plt%2Fwww","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fteach-plt%2Fwww","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteach-plt%2Fwww/lists"}