• Keine Ergebnisse gefunden

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

N/A
N/A
Protected

Academic year: 2022

Aktie "Übungsblatt 3: Ü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 3: Übersetzer und sprachverarbeitende Werkzeuge (SS 2009)

Hand Out: 4. Mai 2009 Hand In: 11. Mai 2009

Aufgabe 1 Eindeutigkeit von Grammatiken

Welche der folgenden Grammatiken sind mehrdeutig? Welche Sprachen beschreiben sie? Begründen Sie Ihre Antwort.

a) N = {S} T = {0,1} Π = {S → 0S1 | 0 1}

b) N = {S} T = {a,+,−} Π = {S → +S S | −S S|a} c) N = {S} T = {(,)} Π = {S → S(S)S|}

d) N = {S} T = {a,b} Π = {S → aSaS | bSaS | } e) N = {S} T = {a,+,∗,(,)} Π = {S → a | S+S | S S | S∗ | (S)}

Aufgabe 2 Konstruktion von Grammatiken

Erstellen Sie eine Grammatik für die Sprache, die alle Teilmengen der Java-Modifierpublic,final undstatic in allen möglichen Reihenfolgen akzeptiert. Wie würden Sie diese Aufgabe in einem realistischen Compiler für eine größere Menge an Modifiern lösen?

Aufgabe 3 Recursive Descent

a) Erstellen Sie eine Grammatik für vereinfachte XML-Dokumente die für einen Recursive-Descent-Parser geeignet ist.

Diese Dokumente bestehen aus beliebig verschachtelten Tags, mit beliebig vielen Attributen, d.h. Name-Wert- Paaren. Es sind beliebige Tag- und Attributbezeichner erlaubt. Text zwischen Tags, wie z.B. der Text ei- nes XHTML-Dokuments ist nicht erlaubt. Whitespace zwischen Tags wird ignoriert. XML-Header wie z.B.

<?xml version="1.0"encoding="UTF-8"?>, sind nicht in der Sprache enthalten. Die Grammatik mussnicht

sicherstellen, dass die Bezeichner von öffnenden und schließenden Tags korrekt gepaart sind.

Die Grammatik sollte die Baumstrukturierung von XML widerspiegeln, d.h. es sollte sinnvoll möglich sein, mit einem Parser für Ihre Grammatik, den in der Abbildung dargestellten Baum aufzubauen.

Hinweis:Überlegen Sie sorgfältig, welche Terminalsymbole Sie wählen.

<taga attr1="value" attr2="value">

<tagb attr3="value">

<tagc/>

</tagb>

<tagd/>

</taga>

(2)

TAG

taga ATTR

(attr1,"value") (attr2,"value")

BODY

TAG

tagb ATTR

(attr3,"value") BODY

TAG

tagc ATTR BODY tagc tagb

TAG

tagd ATTR BODY tagd taga

b) Implementieren Sie den Parser. Verwenden Sie zum Scannen JFlex. Ihr Programm soll eine Datei einlesen und die Baumstruktur als Text ausgeben, so dass man nachvollziehen kann, dass korrekt geparst wurde.

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

d) Erweitern Sie die Namens- und Typanalyse um die neuen Konstrukte. Nun sind auch nicht-statische Methoden und Felder in Klassen erlaubt. Beachten Sie, dass Sie in statischen

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

• 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

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

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