examples | ||
images | ||
slides | ||
evaluation_scheme.md | ||
README.md | ||
specification.md | ||
submission.md |
Compiler Construction
Date | Topic / Recommended Schedule / Deadlines |
---|---|
2020-03-03 | no proseminar |
2020-03-10 | Lexer complete |
2020-03-17 | |
2020-03-24 | |
2020-03-31 | Parser complete |
2020-04-07 | no proseminar |
2020-04-14 | no proseminar |
2020-04-21 | Semantic checks complete |
2020-04-28 | |
2020-05-05 | AST → TAC conversion complete |
2020-05-12 | |
2020-05-19 | TAC → ASM (no function calls) complete |
2020-05-26 | |
2020-06-02 | TAC → ASM (with function calls) complete |
2020-06-09 | CFG generation complete |
2020-06-16 | Polish |
2020-06-23 | Build test submission deadline |
2020-07-14 | Final submission deadline (no extensions) |
Structure
The ultimate goal of this course is to build a working compiler according to the given specification.
You are not allowed to use code from other people participating in this course or code that has been submitted previously by somebody else. A getting started code-base is provided, but you can also start from scratch.
During the lab, short QA sessions will be held. You can work on your compiler in the meantime. I'll be present for questions all the time, yet a big part of this course is to acquire the necessary knowledge yourself.
Please note that minor modifications may be made to the specification until 2 weeks before the final deadline. Therefore, double check for modifications before submitting — Git provides you the diff anyway.
You may work together in teams of 1–3 people. Teams may span across pro-seminar groups.
Programming Language
Any of the following programming languages can be used:
- modern C (used for the getting started code-base)
- modern C++
- Go
- Rust
- Haskell
Go easy on external dependencies and obscure language extensions — yes, I'm looking at you, Haskell. Code readability is paramount. Using overly complex and cryptic concepts may negatively impact the evaluation process — again, looking at you, Haskell and your voodoo magic lenses.
Evaluation System
I'll be using a virtualised, updated Ubuntu 20.04 LTS (64 bit) to examine your submissions. From this you can infer the software versions I'll be using. The submitted code has to compile and run on this system.
Grading
The final grade is computed as the weighted average of the final submission (80%) and the QA sessions (20%). Both of these parts as well as the majority of QA session grades must be positive to pass this course.
Be sure to adhere to the specification, deviating from it (without giving proper reason) will negatively impact your grade. See Final Submission Evaluation Scheme for more details.
Absence
You must not be absent more than three times to pass this course. You do not have to inform me of your absence.
Contacting Me
If you have questions or want to know more about a certain topic, I am always glad to help. You can find me in room 2W05 of the ICT building.
You can also contact me by email, just be sure to send it from your university account. Please keep your email informal and include the course number in the subject. Preferably use the following link.