Im Rahmen der Vorlesung "Compilerbau" an der DHBW Stuttgart Campus Horb entwickeln wir als Gruppe den minimalen Java-Compiler "Flompiler".
Name | Aufgabenbereich | Benutzername | Dokumentation |
---|---|---|---|
Ruben Kraft | Parser | Pereki | Parser |
Lukas Burkhardt | Typ-Check | L4kiLuk | Type-check |
Paul Lehmann | Bytecode | NoName11234 | Bytecode |
David Maier | Tests | dasdawidt | Tests |
In den jeweils verlinkten Dateien ist dokumentiert, woraus die Aufgabe bestand und wie sie gelöst wurde. Die Bearbeitung eines Aufgabenbereichs wurde vom jeweiligen verantwortlichen Teammitglied verantwortet und durchgeführt.
Unser Compiler besteht aus drei Teilen:
- Dem
ScannerParserLexer
, der die Input-Datei einliest, sie in Tokens umwandelt und parst. So entsteht der ungetypte abstrakte Syntaxbaum. - Dem
TypeChecker
, der die Semantik der Tokens kontrolliert, woraus der getypte abstrakte Syntaxbaum resultiert. - Dem
BytecodeGenerator
, der aus dem resultierenden getypten abstrakten Syntaxbaum Bytecode generiert.
Orchestriert wird der Compiler von Flompiler
, der als Controller fungiert und zwischen den Komponenten vermittelt.
Dieser implementiert eine Main-Methode, die den Pfad zur Input-Datei als erstes Argument erhält.
Die drei Bestandteile kommunizieren intern den abstrakten Syntaxbaum (AST), der wie folgt aufgebaut ist:
Es folgt eine Übersicht über die prägnantesten der unterstützen Features.
boolean
int
char
String
- Arithmetische (
+
,-
,*
,/
) - Vergleichsoperatoren (
<
,>
,<=
,>=
,==
) - Logische Operatoren* (
&&
,||
,!=
) - Unäre* (
++
,--
) - Konkatenation* (
"Hello " + "world!"
)
*Mit Stern markierte Funktionen sind in Version 1.0 nicht in allen Teilen des Compilers funktionsfähig.
- Klassen
- Attribute (direkte Initialisierung nur mittels Konstanten, also
public int age = 1;
und nichtpublic int age = 1 + 1;
) - Methoden
- Methodenaufrufe (nur Methoden derselben Klasse)
- Variablen
- Leerer Konstruktor
if
,if-else
while
return
Der Flompiler erwartet beim Start ein Kommandozeilenargument, welches den Pfad zur zu kompillierenden .java
-Datei angibt.
Wird der (kompilierte) Compiler in der Kommandozeile verwendet, startet man den Kompilierungsprozess mit:
java Flompiler "path/to/file.java"
Alternativ kann der Pfad in der IDE als Kommandozeilenargument angegeben werden.
Beispiel-Quelldateien befinden sich im Ordner src/test/resources
.
Bei erfolgreicher Kompilierung erzeugt der Compiler eine gleichnamige .class
-Datei neben der Input-Datei.
Kompillierte .jar
-Dateien finden sich auf der Releases-Seite.