• Keine Ergebnisse gefunden

Lehrstuhl f¨ ur Programmierparadigmen

N/A
N/A
Protected

Academic year: 2022

Aktie "Lehrstuhl f¨ ur Programmierparadigmen"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Universit¨ at Karlsruhe (TH)

Lehrstuhl f¨ ur Programmierparadigmen

Sprachtechnologie und Compiler WS 2008/2009 http://pp.info.uni-karlsruhe.de/

Dozent: Prof. Dr.-Ing. G. Snelting snelting@ipd.info.uni-karlsruhe.de Ubungsleiter: Matthias Braun¨ braun@ipd.info.uni-karlsruhe.de Ubungsblatt 3¨ Ausgabe: 7.11.2008 Besprechung: 12.11.2008

Aufgabe 1:Praxis: Symboltabelle, Rekrusiver Abstieg

Unterhttp://pp.info.uni-karlsruhe.de/lehre/WS200809/compiler/uebung/minicalc2.zipfinden Sie ei- ne L¨osung zu Aufgabe 1 aus dem letzten ¨Ubungsblatt. Diese wurde um eine Symboltabelle und neue Tokentypen (T PI,T SIN,T COS,T TAN) erweitert.

Hinweis: Zum ¨Ubersetzen der Dateien wird gcc, flex und make ben¨otigt. Windows Portierungen dieser Tools sind unterhttp://sourceware.org/cygwin/erh¨altlich. Mac Versionen zum Beispiel unterhttp://www.macports.

org/. Die Dateien werden dann durch Eingabe vonmakeauf der Kommandozeile ¨ubersetzt.

1.1Ausdrucksgrammatiken

Der Parser benutzt folgende Grammatik:

Z → Z0 $

Z0 → expression Z0|

expression → newline|add sub expressionnewline add sub expression → mul div expression add sub expression0 add sub expression0 → + add sub expression|−add sub expression

mul div expression → atomic expression mul div expression0 mul div expression0 → ∗ atomic expression|/atomic expression

atomic expression → number|lbraceadd sub expressionrbrace

F¨ur einige mathematischen Ausdr¨ucke werden mit dieser Grammatik

”falsche” also nicht dem ¨ublichen mathe- matischen Verst¨andnis entsprechenden Syntaxb¨aume aufgebaut.

• Welche sind das?

• Geben Sie eine alternative Grammatik an, die f¨ur SLL(1)-Parser geeignet ist und das Problem behebt.

• Andern sie den rekursiven Parser entsprechend ihrer neuen Grammatik ab.¨

1.2Nutzung der Symboltabelle

Erweitern Sie den Scanner um Regeln die Bezeichner erkennen. Bezeichner beginnen mit einem Buchstaben (a-z, A-Z) optional gefolgt von beliebig vielen Buchstaben oder Ziffern.

Wurde ein Bezeichner erkannt, so soll in der Symboltabelle nachgeschlagen (find or insert symbol (”symbolstring”)) werden welchem Token-Typ er entspricht (symbol−>id). Dazu muss die Symboltabelle vorher mit Eintr¨agen bef¨ullt werden (am Anfang der Funktion main).

Erweitern Sie das Programm, so dass die mathematischen Ausdr¨ucke sinx, cosx und tanx erkannt werden.

Hinweis: In C kann man die entsprechenden Berechnungen mit den gleichnamigen Funktionen sin (x), cos(x) und tan(x) durchf¨uhren.

1.3Skalierbarkeit der Symboltabelle

(2)

Sehen Sie sich die Implementierung der Symboltabelle an.

• Was passiert wenn sehr viele Eintr¨age in der Symboltabelle erstellt werden?

• Verbessern Sie die Skalierbarkeit durch geeignete Maßnahmen (Zusatzaufgabe).

Aufgabe 2:LL(k)und SLL(k)

Eine kontextfreie GrammatikG= (T, N, P, Z) heißt SLL(k),k >0, falls f¨ur beliebige Ableitungen

Z ⇒LµAχ⇒µνχ⇒µγ µ, γ∈T, ν, χ∈V, A∈N Z ⇒Lµ00⇒µ0ωχ0µ0γ0 µ0, γ0∈T, ω, χ0∈V

aus (k:γ=k:γ0) ν =ωfolgt.

Zeigen Sie:

2.1EinSLL(1)Kriterium

Eine kontextfreie GrammatikG= (T, N, P, Z) ist SLL(1) gdw. f¨ur alle Produktionen A→l1,A→l2 gilt:

FIRST1(l1FOLLOW1(A))∩FIRST1(l2FOLLOW1(A)) =∅.

2.2SLL(k)→LL(k)

Jede SLL(k)-Grammatik ist auch LL(k).

2.3LL(1)↔SLL(1),¬(LL(k)↔SLL(k))

Eine kontextfreie Grammatik G = (T, N, P, Z) ist LL(1) genau dann, wenn sie SLL(1) ist. Die Aussage (LL(k) ⇐⇒ SLL(k)) gilt nicht f¨ur beliebigek.

2.4¬SLL(2)

Grammatiken sind nicht alle SLL(2) (Gegenbeispiel).

Aufgabe 3:Was bin ich?

F¨ur welches ksind die folgenden Grammatiken LL(k)? Sind sie auch SLL(k)?

(a) Z→S (b) Z →S (c) Z→C|D (d) Z →S

S→aS S→aA C→aC|b S →Ax|By|dAy

S→a A→S D→aD|c A→C|z

A→ε B →C

C→c

Aufgabe 4:LL(0)-Eigenschaft 4.1|L(G)|

Wieviele W¨orter enth¨alt eine Sprache, die durch eine LL(0)-Grammatik beschrieben werden kann?

4.2|P|

Wieviele Produktionen gibt es in einer LL(0)-Grammatik f¨ur jedes Nichtterminal?

2

Referenzen

ÄHNLICHE DOKUMENTE

1 Dieser Mechanismus ¨ ahnelt den Exceptions von Java, es gibt allerdings nur eine einzige Sorte

Die Menge der nat¨ urlichen Zahlen N l¨ asst sich als Teilmenge der reellen Zahlen R wie folgt definieren:.. (a) 0 ist eine nat¨

Andreas Lochbihler Joachim Breitner andreas.lochbihler@kit.edu breitner@kit.edu. Semantik von Programmiersprachen –

Dann muss man allerdings neu ¨ uber syntaktischen Zucker f¨ ur arithmetische und boolesche Ausdr¨ ucke nachdenken: Eine Addition w¨ urde dann ggf.. l¨ anger dauern als

Die Maschine, auf der die ¨ ubersetzten Ausdr¨ ucke abgearbeitet werden sollen, nimmt eine Liste von Instruktionen, einen (anfangs leeren) Stack und einen Zustand mit der

5.3 haben wir die While-Sprache um Bl¨ ocke mit lokalen Variablen erweitert und operatio- nale Semantiken daf¨

Insbesondere f¨ ur Datenflussanalysen die nur Aussagen ¨ uber einzelne Werte machen (und nicht ¨ uber Beziehungen zwischen Werte) ist es trivial die Datenfluss- analyse als

Somit l¨ asst sich nicht garantieren, dass die L¨ osung als F¨ arbung f¨ ur das urspr¨ ungliche Programm