• 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 3¨ Ausgabe: 28.04.2010 Besprechung: 05.05.2010

Aufgabe 1:Parser 1.1SLL(k)-Grammatik

• Die Grammatik aus dem Sprachbericht l¨asst sich nicht direkt mit rekursiven Abstieg implementieren.

Warum?

• Formen Sie die Grammatik in eine geeignete SLL(k)-Grammatik um und geben Sie diese ab. Wie groß ist k?

1.2Parser

Entwickeln Sie aus der Syntaxbeschreibung im Sprachbericht von MiniJava einen Parser. Dieser soll f¨ur beliebige Textdateien entscheiden k¨onnen, ob die Syntax der Datei der Sprache MiniJava entspricht. Eine Semantik und Typpr¨ufung hat selbstverst¨andlich noch nicht zu erfolgen.

Wenden Sie den Parser auf die Beispielprogramme an und entscheiden Sie welche Programme eine korrekte Syntax haben. Notieren Sie den ersten aufgetretenen Fehler bei Programmen mit unkorrekter Syntax. Welche dieser Fehler lassen sich einfach beheben?

1.3Testen

Erstellen Sie jeweils 5 (nicht notwendigerweise sinnvolle) Programme mit korrekter Syntax und 5 mit inkorrekter Syntax. Tauschen Sie Ihre Beispiele mit den anderen Gruppen aus und vergleichen Sie die Ergebnisse.

(2)

Aufgabe 2:Zusatzaufgaben

Im Rahmen eines universit¨aren Praktikums k¨onnen immer nur die wichtigsten Aspekte eines Compilers be- trachtet werden. Oft gibt es aber viele weitere interessante Themen in Theorie und Praxis bei denen sich eine tiefergehende Besch¨aftigung lohnt. Mit den Zusatzaufgaben wollen wir einige Anregungen in diese Richtung liefern. Die Zusatzaufgaben sind nat¨urlich vollkommen freiwillig.

2.1Fehlermeldungen

Ein wichtiger Punkt in der Praxis ist die Qualit¨at der Fehlermeldungen. Gute Fehlermeldungen wirken sich meist direkt auf die Produktivit¨at von Entwicklern aus, da er Fehler schneller lokalisieren, verstehen oder Programmierfehler vermeiden kann.

• Die meisten Compiler haben zus¨atzliche Kategorien von Meldungen wie

”Warnungen”,

”Fehler” oder

”fatale Fehler”. Was sind die Unterschiede?

• Dem Benutzer sollten Hilfestellungen zur Lokalisierung der Fehler gegeben werden. Dazu sind Informatio- nen wie Zeilennummer, Spalte oder auch Beginn und Ende der Fehlerstelle n¨utzlich.

• Fehler treten in verschiedenen Phasen des Compilers auf. Die meisten Nutzer bevorzugen Fehlermeldung aber in der Reihenfolge wie sie im Programm auftreten.

• Gibt es weitere wichtige Aspekte f¨ur gute Fehlermeldungen?

2.2Unterschiedliche Zeichens¨atze

Programme werden heutzutage meist weltweit von internationalen Teams entwickelt und die Benutzerschnitt- stellen auf lokale Gegebenheiten angepasst. Compiler sind hier meist recht unkritisch da wenig mit dem Benutzer interagiert werden muss. Das Wichtigste hier ist wohl die Unterst¨utzung verschiedener Zeichens¨atze. In den ver- schiedenen L¨andern, Kulturen und leider auch Betriebssystemen haben verschiedene Zeichens¨atze durchgesetzt.

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 europ¨aischen Raum sind ISO8859-15. Heutzu- tage wird meist der Unicode Standard mit 224 m¨oglichen Zeichen eingesetzt, der alle relevanten Schriftsysteme unterst¨utzt.

• Wo spielen verschiedene Zeichens¨atze bei einem Compiler eine Rolle?

• Sollten Zeichenketten in der Sprache erweiterte Zeichen enthalten d¨urfen?

• Sollten Bezeichner erweiterte Zeichen enthalten d¨urfen?

• Wie kodiert man Bezeichner und Zeichenketten innerhalb des Compilers, welchen Code erzeugt man und wie ist die Eingabe kodiert?

• Wie erkenne ich die Kodierung der Eingabe?

• Werden bei der lexikalischen Analyse Automaten eingesetzt, so f¨uhren die 224 Zeichen des Unicode Stan- dards zu extrem großen Tabellen. Was kann man dagegen tun?

2

Referenzen

ÄHNLICHE DOKUMENTE

Je nachdem welche Programmiersprache ihnen am besten liegt k¨ onnen Sie ihren Compiler in C/C++ oder Java entwickeln. Die sp¨ ater f¨ ur Optimierungen benutze Bibliothek

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

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