• Keine Ergebnisse gefunden

Universit¨at Karlsruhe (TH) Lehrstuhl f¨ur Programmierparadigmen

N/A
N/A
Protected

Academic year: 2022

Aktie "Universit¨at Karlsruhe (TH) Lehrstuhl f¨ur Programmierparadigmen"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Universit¨ at Karlsruhe (TH)

Lehrstuhl f¨ ur Programmierparadigmen

Compilerpraktikum SS 2010 http://pp.info.uni-karlsruhe.de/

Dozent: Prof. Dr.-Ing. G. Snelting snelting@ipd.info.uni-karlsruhe.de

Betreuer: Matthias Braun matthias.braun@kit.edu

Betreuer: Sebastian Buchwald sebastian.buchwald@kit.edu

Ubungsblatt 2¨ Ausgabe: 21.4.2010 Besprechung: 28.04.2010

Aufgabe 1:Lexikalische Analyse

Die lexikalische Analyse zerteilt die Eingabe in die grundlegenden Symbole (auch Token genannt) der Sprache.

Die lexikalische Analyse ist strenggenommen nur eine Optimierung, die die Eingabe in eine Form bringt die besser f¨ur die syntaktische Analyse geeignet ist. Sie f¨uhrt zu einer Informationskompression da l¨angere Zeichenketten f¨ur Bezeichner und Schl¨usselw¨orter auf Symbole abgebildet werden. Da die Techniken zur lexikalischen Analyse (endliche Automaten) sehr schnell arbeiten, lohnt sie sich im allgemeinen.

1.1Planung

• Lesen Sie sich den Teil des Sprachberichts zur lexikalischen Analyse durch.

• Entwerfen Sie ein Interface f¨ur ihren Lexer. Wie sehen die Datenstrukturen f¨ur die Tokens aus?

• Welche Rolle hat die Stringtabelle?

• Entwerfen Sie einen deterministischen endlichen Automaten f¨ur die Tokens aus ihrer Sprache.

1.2Implementierung

• Implementieren Sie ihren Lexer nach einem auf den Folien angedeuteten Verfahren.

1.3Testen

Zum Testen der lexikalischen Analyse bietet es sich an einen gegebenen Quelltext einzulesen und die erkannten Tokens nacheinander auszugeben. Ihr Programm sollte sich dabei an folgende Standards halten:

Ihr Compiler sollte bei Aufruf mit compiler --lextest dateiname die Eingabe aus der angegebenen Datei einlesen und dann folgende Ausgabe produzieren:

• F¨ur Leerr¨aume und Kommentare wird nichts ausgegeben.

• Schl¨usselw¨orter und Operatoren werden so wie sie sind ausgegeben.

• Bezeichner werden mit dem Pr¨afixidentifier ausgegeben.

• Zahlen werden mit dem Pr¨afixinteger literal ausgegeben.

• Nach jedem ausgegebenen Token wird eine neue Zeile begonnen.

• Tritt ein Fehler auf, so wird eine Meldung ausgegeben die die Zeichenkette errorenthalten muss. Ob man einem Fehler abgebrochen oder weiter analysiert wird ist nicht spezifiziert.

• Ist das Ende der Eingabe erreicht so wirdEOFausgegeben.

Ihr Compiler sollte im--lextestModus diese Vorgaben strikt einhalten da wir automatisierte Tests damit durchf¨uhren wollen.

Beispiel: Die Eingabe:

(2)

/∗∗

∗ A c l a s s i c c l a s s

∗ @author Beate B e s t

∗/

p u b l i c c l a s s c l a s s i c {

p u b l i c i n t method ( i n t a r g ) { i n t r e s = a r g +42;

r e s >>= 4 ; r e t u r n r e s ; }

}

Sollte die folgende Ausgabe produzieren:

p u b l i c c l a s s

i d e n t i f i e r c l a s s i c {

p u b l i c i n t

i d e n t i f i e r method (

i n t

i d e n t i f i e r a r g )

{ i n t

i d e n t i f i e r r e s

=

i d e n t i f i e r a r g +

i n t e g e r l i t e r a l 42

;

i d e n t i f i e r r e s

>>=

i n t e g e r l i t e r a l 4

; r e t u r n

i d e n t i f i e r r e s

; } } EOF

2

Referenzen

ÄHNLICHE DOKUMENTE

Zwar ist ASCII heutzutage so gut wie ¨ uberall unterst¨ utzt, viele Sprachen ben¨ otigen aber weitere Zeichen die in ASCII nicht enthalten sind. Typische ASCII-Erweiterungen im

Es wird also anscheinend kein speziellere Datentyp f¨ ur Closures angelegt, der einen Funktionszeiger und einen Zeiger auf die Umgebung

• Nehmen Sie an die Anzahl der Register ist auf 3 beschr¨ ankt, spielt die Auswertungsreihenfolge bei den Ausdr¨ ucken jetzt noch eine Rolle. Aufgabe

Konstruieren Sie unter der Voraussetzung, dass alle nicht konstanten Operanden im Arbeitsspeicher stehen, Syntaxb¨ aume f¨ ur die folgenden Anweisungen:. 1. x = x

Skizzieren Sie Anordnung der Objekte auf dem Heap f¨ ur die Stelle nach dem Aufruf von ’A.create()’ unter der Annahme, dass beim Start der main Methode der Heap v¨ ollig leer

Semantische Analyse: Namensanalyse, Typanalyse, Operatoridentifikation, Konsistenzpr¨ ufung, Sprach- abh¨ angige Sonderaufgaben, Struktur¨ aquivalenz, Definitionstabelle,

Erstelle daf¨ ur zun¨ achst eine Tabelle mit den Gen- und Kill-Mengen der einzelnen Bl¨ ocke und f¨ uhre danach eine

F¨uhren Sie eine GOTO-Elimination f¨ur die folgende Methode durch (continue ist auch eine spezielle Form