Go to file
2020-03-28 18:49:01 +01:00
examples Add operator_precedence example 2020-02-13 23:25:38 +01:00
images Add fib_ast example source 2019-02-01 17:06:49 +01:00
slides Add transcript to intro slides 2020-02-29 12:43:22 +01:00
evaluation_scheme.md Update for 2020 2020-02-27 15:40:25 +01:00
README.md Fix course number in mail link 2020-03-28 18:49:01 +01:00
specification.md Spec: Semantic checking may stop on first error 2020-03-20 13:38:02 +01:00
submission.md Adjust information for corona situation 2020-03-16 14:57:07 +01:00

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
2020-04-14
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 13 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.

Remote Seminar

While university grounds are locked down, no attendance is required and no QA sessions are held. I'll stream during the regular seminar times over at Twitch, feel free to tune in and ask questions. Streams should be recorded by Twitch automatically and remain online for 14 days.

I recommend sending me snapshots of your code-base, I'll provide feedback while streaming. See Submission Guideline.

Contacting Me

If you have questions or want to know more about a certain topic, I am always glad to help.

You can 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.

📧 send email