# Homework 5 - 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 LLVM eller Cranelift. Det går också bra att skriva en interpreter istället för en backend till er kompilator.
Lägg koden i ett publikt gitrepo på github.com i **INDA22PlusPlus** organisationen, “INDA22PlusPlus/***kth-id***-compiler”.
Ni har till och med nästa övning **(4e 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 genom t.ex LLVM eller Cranelift.
### Alternativ 2 (Interpreter):
Kompilera till ett annat språk som i sin tur går att kompilera (t.ex C)
### Alternativ 3 (Interpreter):
Skriv en interpreter för ert språk istället för att kompilera till en executable. Exekvera er AST eller skapa en IR som ni exekverar.
## 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)
* [Writing an Interpreter](https://ruslanspivak.com/lsbasi-part1/)