> […] development of a compiler for a simple procedural programming language
> […] development of a compiler for a simple, procedural programming language
<asideclass="notes">
As stated by the curriculum, your task is to build a simple compiler for a small procedural programming language.
...
...
@@ -20,16 +20,12 @@ Still, it is highly recommended to work in teams and that you start early - alwa
- This is a master's course!
- Brain
If you struggle too much, do this course at a later time.
You can unregister until the end of April.
<asideclass="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.
Otherwise, skip it for now and come back to it when you have acquired the necessary knowledge.
</aside>
- - -
...
...
@@ -50,7 +46,7 @@ Otherwise, skip it for now and come back to it when you have acquired the necess
Since this course is very programming intensive, you need to be fluent in one of these languages.
If 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 revisit the corresponding lecture would be a good idea.
For OS, if you think calling `exec` without `fork` while implementing a library is a good idea, maybe revisiting the OS course would be a good idea.
</aside>
- - -
...
...
@@ -85,23 +81,13 @@ The lecture and proseminar assumes that you are familiar with the basics of gram
@@ -531,7 +531,7 @@ This is the main compiler executable, sometimes referred to as *driver*.
The following directory layout is used.
mcc/ # This node represents the root of the repository.
/ # This node represents the root of the repository.
├── app/ # Each C file in this directory corresponds to one executable.
│ ├── mc_ast_to_dot.c
│ ├── mcc.c
...
...
@@ -599,7 +599,7 @@ Similarly, a way to run unit tests using `valgrind` is provided.
### Dependencies
The *prerequisites* section of the README enumerates all dependencies.
The implementation should not have any dependencies apart from the standard library, system libraries (POSIX), a testing framework, and a lexer / parser generator.
The implementation should not have any dependencies apart from the standard library, system libraries, a testing framework, and a lexer / parser generator.
If a dependency is not available via the evaluation system's package manager, it needs to be automatically built and used by the build system.
It is recommended to *vendor* such dependencies rather than downloading them during build time.
...
...
@@ -611,7 +611,7 @@ Architectural design and readability of your code will be judged.
- Don't be a git — use [Git](https://git-scm.com/)!
- Files are UTF-8 encoded and use Unix line-endings (`\n`).
- Files contain *one* newline at the end.
- Lines do not contain trailing whitespaces.
- Lines do not contain trailing whitespace.
- Your code does not trigger warnings, justify them if otherwise.
- Do not waste time or space (this includes memory leaks).
- Check for leaks using `valgrind`, especially in error cases.
...
...
@@ -624,7 +624,7 @@ Architectural design and readability of your code will be judged.
### C/C++
-While not required, it is highly recommended to use a formatting tool, like [ClangFormat](https://clang.llvm.org/docs/ClangFormat.html).