README.md 4.09 KB
Newer Older
Alexander Hirsch's avatar
Alexander Hirsch committed
1
# Compiler Construction
Alexander Hirsch's avatar
Alexander Hirsch committed
2
3
4

|    Date    | Topic / Recommended Schedule / Deadlines  |
| ---------- | ----------------------------------------- |
5
6
7
| 2021-03-05 | *Introduction*                            |
| 2021-03-12 | *Explaining lexer & parser code*          |
| 2021-03-19 | Lexer complete                            |
Alexander Hirsch's avatar
Alexander Hirsch committed
8
| 2021-03-26 | Team composition                          |
9
10
11
12
13
14
15
16
17
18
| 2021-04-16 | Parser complete                           |
| 2021-04-23 |                                           |
| 2021-04-30 | Semantic checks complete                  |
| 2021-05-07 |                                           |
| 2021-05-14 | AST → TAC conversion complete             |
| 2021-05-21 |                                           |
| 2021-05-28 | TAC → ASM (no function calls) complete    |
| 2021-06-04 |                                           |
| 2021-06-11 | TAC → ASM (with function calls) complete  |
| 2021-06-18 | CFG generation complete                   |
Alexander Hirsch's avatar
Alexander Hirsch committed
19
| 2021-06-25 |                                           |
20
| 2021-07-16 | Final Submission deadline (no extensions) |
Alexander Hirsch's avatar
Alexander Hirsch committed
21
22
23
24
25
26
27
28
29

- [mC Compiler Specification](specification.md)
- [Getting Started Code-base](https://git.uibk.ac.at/c7031162/mcc)

## 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.
Alexander Hirsch's avatar
Alexander Hirsch committed
30
A *getting started* code-base is provided, but you can also start from scratch.
Alexander Hirsch's avatar
Alexander Hirsch committed
31

Alexander Hirsch's avatar
Alexander Hirsch committed
32
Please note that minor modifications may be made to the specification until 2 weeks before the final deadline.
Alexander Hirsch's avatar
Alexander Hirsch committed
33
34
Therefore, double check for modifications before submitting — Git provides you the diff anyway.

Alexander Hirsch's avatar
Alexander Hirsch committed
35
You may work together in teams of 1–3 people.
36
37
38
39
Teams may span across proseminar groups.

The proseminar takes place online [over at Twitch](https://www.twitch.tv/AlexWarhawk), attendance is not mandatory.

Alexander Hirsch's avatar
Alexander Hirsch committed
40
41
42
43
44
45
### Repository

Host your code on the University GitLab and add me as developer to your repository.

Furthermore, it is required to set up GitLab CI to automatically build and test your code.
The getting started code-base comes with a basic [`.gitlab-ci.yml`](https://git.uibk.ac.at/c7031162/mcc/blob/master/.gitlab-ci.yml).
Alexander Hirsch's avatar
Alexander Hirsch committed
46

Alexander Hirsch's avatar
Alexander Hirsch committed
47
### Programming Language
Alexander Hirsch's avatar
Alexander Hirsch committed
48

Alexander Hirsch's avatar
Alexander Hirsch committed
49
Any of the following programming languages can be used:
Alexander Hirsch's avatar
Alexander Hirsch committed
50

Alexander Hirsch's avatar
Alexander Hirsch committed
51
52
53
54
55
- modern C (used for the getting started code-base)
- modern C++
- Go
- Rust
- Haskell
Alexander Hirsch's avatar
Alexander Hirsch committed
56

Alexander Hirsch's avatar
Alexander Hirsch committed
57
58
Go easy on external dependencies and obscure language extensions — yes, I'm looking at you, Haskell.
Code readability is paramount.
59
Using overly complex or cryptic concepts may negatively impact the evaluation process — again, looking at you, Haskell and your voodoo magic lenses.
Alexander Hirsch's avatar
Alexander Hirsch committed
60

Alexander Hirsch's avatar
Alexander Hirsch committed
61
62
63
64
## Submission

### Team Composition

65
Send me a mail (one per team) with the names of your team members and a link to your repository — even if you work alone.
Alexander Hirsch's avatar
Alexander Hirsch committed
66
67
68
69
70
71
72
Don't forget to add me as developer to your repository.

### Feedback Request

Just message me whenever you want to receive feedback on your code.
Tell me which commit to look at.

Alexander Hirsch's avatar
Alexander Hirsch committed
73
Ensure that the files do not contain any personal information like names or student IDs as I'll be going over the code on stream.
Alexander Hirsch's avatar
Alexander Hirsch committed
74
75
76
77

### Final Submission

Add the tag `final` to the revision you want me to look at for the final evaluation.
78
Note that tags need to be pushed explicitly.
Alexander Hirsch's avatar
Alexander Hirsch committed
79
80

I'll only evaluate your solution if the corresponding CI job builds and tests your code successfully.
Alexander Hirsch's avatar
Alexander Hirsch committed
81
Do not forget to enable integration tests when using the provided CI configuration.
Alexander Hirsch's avatar
Alexander Hirsch committed
82

Alexander Hirsch's avatar
Alexander Hirsch committed
83
84
## Grading

85
The final grade is computed solely from the final submission.
Alexander Hirsch's avatar
Alexander Hirsch committed
86
87
88
89

Be sure to adhere to the specification, deviating from it (without giving proper reason) will negatively impact your grade.
See [Final Submission Evaluation Scheme](evaluation_scheme.md) for more details.

Alexander Hirsch's avatar
Alexander Hirsch committed
90
91
## Contacting Me

92
Just message me on Discord if you need anything.
93
Alternatively, you can send me a mail using the following link.
Alexander Hirsch's avatar
Alexander Hirsch committed
94

95
📧 [send email](mailto:alexander.hirsch@uibk.ac.at?subject=703602%20-%20)
Alexander Hirsch's avatar
Alexander Hirsch committed
96

97
98
You can also open an issue on GitLab.
Please message me if I do not respond within 24 hours; I might not have received a notification.