• Keine Ergebnisse gefunden

Karlsruher Institut f¨ur Technologie Lehrstuhl f¨ur Programmierparadigmen

N/A
N/A
Protected

Academic year: 2022

Aktie "Karlsruher Institut f¨ur Technologie Lehrstuhl f¨ur Programmierparadigmen"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Karlsruher Institut f¨ ur Technologie

Lehrstuhl f¨ ur Programmierparadigmen

Compilerpraktikum WS 2012/13 Dozent: Prof. Dr.-Ing. G. Snelting

Betreuer: Andreas Zwinkau zwinkau@kit.edu

Ubungsblatt 3¨ Ausgabe: 31.10.2012 Besprechung: 7.11.2012

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 wird 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

(5) Alle Strings aus a und b mit einer geraden Anzahl von a und einer ungeraden Anzahl von b (Denksport- aufgabe). Aufgabe 4: Regul¨ are

Enth¨ alt die Zahl einen Punkt, so darf der Buchstabe e oder E angeh¨ angt werden, gefolgt von einem optionalen + oder - und weiteren Ziffern.. Zus¨ atzlich soll bei T NUMBER Tokens

Wenn wir versuchen, eine LR- Parsertabelle daf¨ ur zu erstellen, ergeben sich Konflikte zwischen einigen Aktionen.. Welche

Wie kann man dies anhand der Parsertabelle begr¨

Ubersetzen Sie den Ausdruck ¨ this.x = 32 - this.foo()[2] in Java Bytecode, geben Sie auch einen passenden Konstantenpool an?. (foo ist eine

Erweitern Sie ihren Verband und die dazugeh¨ origen Transferfunktionen, um das gefundene Problem zu beheben.. F¨ uhren Sie eine Fixpunktiteration mit den erweiterten

Sprachtechnologie und Compiler, Sommersemester 2014 Dozent: Prof.. Was f¨ allt

Schreiben Sie mehrere kleine Testprogramme und vergleichen Sie den generierten x86-64-Assemblers f¨ ur zwei optimierende Compiler.. K¨ onnen Sie