• Keine Ergebnisse gefunden

Übungsblatt 6: Übersetzer und sprachverarbeitende Werkzeuge (SS 2009)

N/A
N/A
Protected

Academic year: 2022

Aktie "Übungsblatt 6: Übersetzer und sprachverarbeitende Werkzeuge (SS 2009)"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Dr. I. Schaefer

Dipl.-Inf. J.-M. Gaillourdet

Technische Universität Kaiserslautern Fachbereich Informatik AG Softwaretechnik

Übungsblatt 6: Übersetzer und sprachverarbeitende Werkzeuge (SS 2009)

Hand Out: 25. Mai 2009 Hand In: 8. Juni 2009

Allgemeines zur Abgabe:

• Checken Sie ihren Code ins SVN ein und erzeugen Sie als Abgabe ein Tagabgabe6in ihrem Verzeichnis tags. Dies geht mit dem Kommando:

svn copy https://so...de:2443/svn/Studenten/trunk/09_SS_USW/<<Gruppe>>/trunk/ \ https://so....de:2443/svn/Studenten/trunk/09_SS_USW/<<Gruppe>>/tags/abgabe6/

• Erstellen Sie ein Skriptrun, dass ihren Compiler übersetzt und startet. Als Parameter soll es die Eingabedatei nehmen. Stellen Sie sicher, dass dies wenigstens auf der Tux1 ohne weitere Einstellungen funktioniert.

Allgemeines zu den Aufgaben: Im folgenden wird nur beschrieben was im Erfolgsfall passieren soll. Fehler sollten Sie natürlich ebenfalls behandeln und ausgeben.

Aufgabe 1 Namensanalyse

Die Namensanalyse ordnet jedem Bezeichner seine Deklarationsstelle zu. Implementieren Sie dazu ein Attribut nameResolution, welches auf jedemIdentifierdefiniert ist und die zugehörige Deklarationsstelle liefert. Für Deklarationsstellen fügen wir der Katja-Spezifikation die SorteDeclarationhinzu, s. unten.

Als Hilfestellung definieren Sie sich zunächst ein Attributcontext, welches zu einemIdentifierden nächsten Vater findet, der von der SorteIdentifierContextist.

nameResolutionsoll für Bezeichner inDeclaration-Kontexten genau diese Deklaration zurück liefern. Verwen- den Sie zur Implementierung vonnameResolutiondas entsprechende Switch-Interface. Dieses gibt es auf Termpo- sitionen genauso wie Sie es auf Termen kennen gelernt haben.

Unsere Sprache umfasst momentan noch keine Referenztypen, daher können auch nur statische Methoden und Klas- senattribute definiert werden. Dies ermöglicht es Ihnen erst, die Namensanalyse unabhängig von der Typanalyse zu definieren.

Declaration = FieldOrVarDecl

| MethodDecl

| FormalParameter

| ClassDecl

IdentifierContext = MethodCall

| FieldOrVariableAccess

| Declaration

Aufgabe 2 Typanalyse von Ausdrücken

Für die Typanalyse implementieren Sie ein AttributtypeOf. Es ist auf beliebigenExpressiondefiniert und liefert derenTypezurück. Verwenden SienameResolution, um die Typen von Variablen, statischen Klassenattributen und statischen Methodenaufrufen herauszufinden.

(2)

Aufgabe 3 Kontextbedingungen

Um die Überprüfung von MiniJava-Programmen zu vervollständigen müssen Sie noch folgende Kontextbedingungen überprüfen.

• JedeCompilationUnitmuss genau eine KlasseMainmit einer statischen Methodestatic void main() enthalten.

• Jede Methode und jedes Attribut iststatic.

• Es gibt drei Typen von Scopes in MiniJava-Programmen: DieCompilationUnit, jede Klasse und jede Me- thode bilden einen Scope. Pro Scope darf jeder Bezeichner nur einmal deklariert werden.

• Jeder Methodenaufruf hat die korrekte Anzahl an Parametern und jeder aktuelle Parameter hat einen, zum for- malen Parameter, kompatiblen Typ.

• Jede nicht-voidMethode hat mindestens einreturn. Der Typ des Ausdrucks hinter demreturnist kompati- bel zum Rückgabetyp der Methode.

• JedevoidMethode hat nurreturn-Anweisungen ohne Ausdruck.

• Nach einemreturnfolgt keine weitere Anweisung im selben Block.

• Die Bedingungen vonifundwhilehaben den Typboolean.

• Die linke und die rechte Seite einer Anweisung haben kompatible Typen.

• JederExpressionhat einen Typ.

Dies alles soll im AttributcontextCorrect, welches eine CompilationUnit nimmt und ein boolean liefert, überprüft werden.

Zur Realisierung definieren Sie sich weitere Attribute und evtl. weitere Katjasorten. Dokumentieren Sie kurz jedes Attribut und seine Abhängigkeiten in einer separaten Datei.

Referenzen

ÄHNLICHE DOKUMENTE

Das Build-Skript muss unter Linux funktionieren, wobei Sie davon ausgehen können, dass java und javac ausführbar und im PATH sind und dass die JFlex.jar -Datei im CLASSPATH ist

Sie sollen eine Methode schreiben, die ein ExpressionPos -Objekt nimmt und den zugrunde liegenden Ausdruck mathematisch korrekt vereinfacht, in dem konstante Teilausdrücke

• Jede CompilationUnit muss genau eine Klasse Main mit einer statischen Methode static void main() enthalten.. • Jede Methode und jedes Attribut

Erweitern Sie die Zwischensprache von oben so, dass Sie als Zwischensprache für Ihren MiniJava-Compiler ge- eignet ist und integrieren Sie die zuvor implementierte Analyse

Ihr Programm soll eine Datei einlesen und die Baumstruktur als Text ausgeben, so dass man nachvollziehen kann, dass korrekt

• JavaCup erzeugt, nebem dem Parser, auch noch eine Klasse mit einer Konstante pro definiertem Nichtterminal- typ, diese heißt standardmäßig sym. • JFlex unterstützt die Anbindung

| If (Value cond, Statement thenCase, Statement elseCase) Assignment = Add (Value dest, Value left, Value right).. | Minus (Value dest, Value left,

Dabei soll die Liste aller Kunden in einer Tabelle dargestellt werden, die lexikographisch nach Name und Vorname sortiert ist.