# Homework 4 - Kompilatorer Del 2: Backend
Denna delen av läxan handlar om att implementera semantic analysis av era språk samt en backend. Denna backend kan vara i form av att kompilera till något annat språk såsom t.ex C eller generera maskinkod direkt. Om ni vill generera maskinkod kan ni använda er av något bibliotek som QBE, LLVM eller Cranelift.
Ni har till och med nästa övning **(1 November)** på er att göra färdigt er kompilator eller interpreter.
## Läxa
1. Skriv färdigt era parsers
2. Implementera semantic analysis
* Variabler defninerade
* Typer korrekt (Om ni har typer)
* Etc..
3. Implementera en backend till er kompilator
### Alternativ 1 (Kompilator):
Kompilera till maskinkod själv eller genom t.ex LLVM eller Cranelift.
### Alternativ 2 (Transpiler):
Kompilera till ett annat språk som i sin tur går att kompilera (t.ex C)
## Resurser
* [LLVM Guide](https://mukulrathi.com/create-your-own-programming-language/llvm-ir-cpp-api-tutorial/) Genomgång av LLVM IR och LLVMs API
* [Officiell tutorial från LLVM](https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/LangImpl03.html)
* [QBE compiler backend](https://c9x.me/compile/), QBE är mycket mer simpelt än LLVM
* [Self-guided kurs i kompilatorer från cornell (handlar mycket om optimering)](https://www.cs.cornell.edu/courses/cs6120/2023fa/self-guided/)
* [Slides](https://docs.google.com/presentation/d/1UdzhkKBtsImnXBwrR7XlmceULV-YJmWSC-JESBN0Log/edit?usp=sharing)