103 lines
2.7 KiB
Markdown
103 lines
2.7 KiB
Markdown
% Compiler Construction
|
||
% Alex Hirsch
|
||
% 5 March 2021
|
||
|
||
# This Proseminar
|
||
|
||
## Curriculum
|
||
|
||
> […] development of a compiler for a simple, procedural programming language
|
||
|
||
<aside class="notes">
|
||
As stated by the curriculum, your task is to build a simple compiler for a small procedural programming language.
|
||
It's quite hard to fit this goal into the 5 ECTS budget of this module (lecture included), nevertheless I think I found the right trade-offs with the given specification.
|
||
|
||
Still, it is highly recommended to work in teams and that you start early — always trying to be ahead of schedule.
|
||
</aside>
|
||
|
||
## Prerequisites
|
||
|
||
- This is a master's course!
|
||
- Brain
|
||
|
||
<aside class="notes">
|
||
By now, this course is notorious for requiring a lot of effort.
|
||
The legends are true; I am indeed expecting a decent level of skill from all of you.
|
||
This is a master's course after all.
|
||
|
||
While I don't care whether you have officially finished your bachelor, you should only take this course if you are certain that you meet the prerequisites.
|
||
</aside>
|
||
|
||
- - -
|
||
|
||
- Fluent in C (or C++, or Go, or Rust, or Haskell)
|
||
- General programming mindset
|
||
- Knowing your tools
|
||
|
||
- Algorithms and data structures
|
||
- Graphs + traversal
|
||
|
||
- Operating systems
|
||
- Utilising your software stack
|
||
|
||
- Assembly (preferably x86)
|
||
|
||
<aside class="notes">
|
||
Since this course is very programming intensive, you need to be fluent in one of these languages.
|
||
If you choose C and think strings are compared using `==` you'll have a very hard time.
|
||
|
||
For OS, if you think calling `exec` without `fork` while implementing a library is a good idea, maybe consider revisiting the OS course.
|
||
</aside>
|
||
|
||
- - -
|
||
|
||
- Software development
|
||
- Version control system
|
||
- Build systems
|
||
- Testing
|
||
|
||
- Project management
|
||
- Organisation
|
||
- Team communication
|
||
|
||
<aside class="notes">
|
||
As already mentioned, the schedule is quite tight, hence good organisation and software development skills are paramount.
|
||
</aside>
|
||
|
||
- - -
|
||
|
||
- Formal languages and automata theory
|
||
- Grammars + transformations
|
||
- Lexer / parser
|
||
|
||
<aside class="notes">
|
||
I also recommend doing this course only after having completed FLAT.
|
||
The lecture and proseminar assumes that you are familiar with the basics of grammars (plus related transformations), lexers, and parsers.
|
||
</aside>
|
||
|
||
## Ultimate Goal
|
||
|
||
- Building a compiler
|
||
- Specification provided
|
||
- Evaluation scheme provided
|
||
|
||
## Recommended Schedule
|
||
|
||
- See README
|
||
|
||
<aside class="notes">
|
||
You are free to deviate from this schedule.
|
||
</aside>
|
||
|
||
## Teams
|
||
|
||
- 1–3 people
|
||
- May span across PS groups
|
||
- Send me your team composition via mail within March
|
||
|
||
## Further Details
|
||
|
||
- See course material
|
||
|
||
<https://git.uibk.ac.at/c7031162/703602-Compiler-Construction>
|