Skip to content

flyndre/Flompiler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tests

Flompiler Logo

Flompiler

Im Rahmen der Vorlesung "Compilerbau" an der DHBW Stuttgart Campus Horb entwickeln wir als Gruppe den minimalen Java-Compiler "Flompiler".

Inhalt

Gruppenzusammenstellung

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.

Aufbau des Compilers

Komponenten

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.

Abstrakter Syntaxbaum

Die drei Bestandteile kommunizieren intern den abstrakten Syntaxbaum (AST), der wie folgt aufgebaut ist:

AST Klassendiagramm

Unterstütze Features

Es folgt eine Übersicht über die prägnantesten der unterstützen Features.

Datentypen

  • boolean
  • int
  • char
  • String

Operatoren

  • 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.

Objektorientierung

  • Klassen
  • Attribute (direkte Initialisierung nur mittels Konstanten, also public int age = 1; und nicht public int age = 1 + 1;)
  • Methoden
  • Methodenaufrufe (nur Methoden derselben Klasse)
  • Variablen
  • Leerer Konstruktor

Strukturen

  • if, if-else
  • while
  • return

Verwendung

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.