Compilerbau2024AbsolutNicht.../README.md

66 lines
4.5 KiB
Markdown
Raw Permalink Normal View History

2024-04-24 12:08:32 +00:00
# CompilerNichtHaskell
2024-04-24 12:35:09 +00:00
2024-06-25 15:26:56 +00:00
## Teamrollen
2024-04-24 12:35:09 +00:00
- Scanner & Parser: Julian Kraus und Laurenz Schleicher
- Semantische Analyse: Juha Ahmad
- Code-Generierung: Simon Wittmann
- Testen: Jonathan Fleischmann
2024-06-22 15:20:18 +00:00
2024-06-25 15:47:40 +00:00
## Erbrachte Leistungen
- Laura Schleicher: Grammatik entwickeln, Records, Statements als Liste zurückgeben, Generator, Syntactic Sugar auflösen
2024-07-03 20:05:57 +00:00
- Julian Kraus: Grammatik entwickeln, Generator, Syntactic Sugar auflösen, Parser Exceptions sammeln
2024-06-23 16:35:57 +00:00
- Ahmad Juha: Typcheck
2024-07-03 20:44:00 +00:00
- Simon Wittmann: Codegen, Logging, CommandLine Nutzung
- Jonathan Fleischmann: Testfiles, manuelle übersetzung in AST und TypedAST, JUnit-Tests für Scanner, Parser und
Typecheck und Compiler, Testfiles für E2E-Tests, JUnit-Tests für E2E-Tests mit Reflections, Negative Testfiles und
Überprüfung, ob sie bei Kompilierung Fehler werfen, Dokumentation
2024-06-25 15:26:56 +00:00
## Besonderheiten unserer Implementierung
2024-06-25 15:47:40 +00:00
- Zugriff auf Felder nur über `this`-Referenz möglich
2024-06-25 15:26:56 +00:00
- `print()`statt `System.out.println()`
2024-06-25 15:47:40 +00:00
- keine Accessmodifier/alles ist public
2024-06-28 20:57:43 +00:00
- logische Statements MÜSSEN geklammert werden, ansonsten wird ununterbrochen von links nach rechts berechnet
(so würde z.B. (true || false == false) false zurückgeben)
2024-07-02 19:49:53 +00:00
- i++ und i-- sind nur in for-Schleifen oder Statements erlaubt, --i und ++i sind generell nicht erlaubt
- ein File kann nur eine Klasse enthalten
- Datentypen sind auf int, boolean und char sowie Klassen beschränkt
## Aufbau der Tests
2024-07-03 20:34:46 +00:00
### Tests für den Scanner, Parser und Typecheck:
- Die Testfiles (.java), die alle Features abdecken, sind im Ordner `src/test/testFiles/ASTandTypedASTFeatures` zu finden.
2024-07-05 08:43:34 +00:00
Der Name des jeweiligen Files gibt circa an, welches Feature / welche Features es abdeckt.
- Ihre manuell übersetzten ASTs befinden sich im Ordner `src/test/java/ScannerParserTests/FeaturesASTs`
- Die Übereinstimmung der manuell übersetzten ASTs mit den vom Compiler generierten ASTs wird mit JUnit-Tests im File
`src/test/java/ScannerParserTests/ScannerParserTests.java` überprüft
- Die manuell übersetzten TypedASTs befinden sich im Ordner `src/test/java/TypeCheckTests/FeaturesTypedASTs`
- Die Übereinstimmung der manuell übersetzten TypedASTs mit den vom Compiler generierten TypedASTs wird mit JUnit-Tests im File
`src/test/java/TypeCheckTests/TypingTests.java` überprüft
- Weitere Testfiles, die nicht unbedingt auf ein bestimmtes Feature abzielen, sind im Ordner `src/test/testFiles/MoreTestFiles`
2024-07-05 08:43:34 +00:00
zu finden, die manuell übersetzen ASTs und TypedASTs dazu sind im Ordner `src/test/java/ScannerParserTests/MoreTestsASTs`
und `src/test/java/TypeCheckTests/MoreTestsTypedASTs` zu finden. Die korrekte Umwandlung der Testfiles in AST und
TypedAST wird in den gleichen Testklassen wie die Features getestet.
2024-07-03 20:34:46 +00:00
### Tests für den gesamten Compiler:
- Da die Kompilierung der Testfiles für den Scanner, Parser und Typecheck teilweise nicht gut mit Reflections testbar ist,
gibt es extra Testfiles für das Testen des Compilers im Ordner `src/test/testFiles/E2EFeatures`
- Jedes der Testfiles hat eine eigene Testklasse, welche sich im Ordner `src/test/java/E2ETests/Features` befindet. Diese
2024-07-03 20:34:46 +00:00
Testklassen haben jeweils einen Namen, der sich aus `E2E_` und dem Namen des Testfiles zusammensetzt. Sie prüfen
mithilfe der Hilfsklasse `src/test/java/E2ETests/BytecodeTestUtil.java`, ob der Compiler die Testfiles korrekt in
2024-07-03 20:34:46 +00:00
class-Files umwandelt. Die Hilfsklasse erstellt ein Class<?>-Objekt der Klasse und implementiert Methoden, welche mit
2024-07-05 08:43:34 +00:00
Reflections Werte aus einem Objekt der Klasse auslesen und zurückgeben. Diese Werte werden dann mit den erwarteten
Werten in der jeweiligen Testklasse verglichen.
2024-07-03 20:34:46 +00:00
### Negative Tests:
- Um zu überprüfen, dass der Compiler auch bei fehlerhaften Testfiles fehlschlägt, gibt es Testfiles im Ordner
2024-07-05 08:43:34 +00:00
`src/test/testFiles/Negative`, welche nicht korrekt kompiliert werden können. Die Testfiles sind in mehrere Kategorien
unterteilt, die durch die Ordnerstruktur in `src/test/testFiles/Negative` dargestellt werden. Für jede Kategorie gibt es
eine eigene Testklasse, die sich im Ordner `src/test/java/NegativeTests` befindet und den gleichen Namen wie der Ordner
ihrer Kategorie hat. Diese Testklassen versuchen die Testfiles ihrer Kategorie zu kompilieren und erwarten, dass der
2024-07-05 08:43:34 +00:00
Compiler fehlschlägt. Die Testfiles, die in keine Kategorie passen werden in der Testklasse
`src/test/java/NegativeTests/RestOfNegativeTests.java` getestet
- Hinweis: Bitte die Ausgabe in der Konsole ignorieren, diese Fehlermeldungen sind die erwarteten Fehlermeldungen,
die der Compiler ausgeben soll, werden in diesem Test-Fall jedoch nicht unterdrückt.