U-0

Übersetzer I Vorlesung WS 1999/2000 Uwe Kastens Ziele: • grundlegende Verfahren der Sprachimplementierung erlernen, • den Einsatz von generierenden Werkzeugen und von Standardverfahren kennen und

schätzen lernen,

© 1999 bei Prof. Dr. Uwe Kastens

• Übersetzerkonstruktion als Beispiel für das Zusammenwirken von grundlegenden

Algorithmen, Theorien und von Software-Engineering-Methoden bei präzise definierten Aufgaben erkennen, • Anwendbarkeit der Verfahren auch für Sprachen jenseits der Programmiersprachen

erkennen.

Vorlesung Übersetzer I WS 1999/2000 / Folie 00 Ziele: Ziele der Vorlesung kennenlernen in der Vorlesung: Begründung der Ziele Verständnisfragen: • Welches sind IHRE Ziele für die Vorlesung? • Stimmen sie mit diesen überein?

U-1

Inhalt

© 1999 bei Prof. Dr. Uwe Kastens

Woche

Thema

1 2

Einführung Übersetzeraufgaben und -struktur

3

Lexikalische Analyse

4 5 6

Syntaktische Analyse konkrete und abstrakte Syntax Rekursiver Abstieg LR-Verfahren

7 8 9

Semantische Analyse attributierte Grammatiken Bezeichneridentifikation Typanalyse

10

Transformation in Zwischensprache, Zieltext

11 12 13

Synthese Optimierende Programmtransformation Verfahren zur Registerzuteilung Code-Erzeugung, Code-Parallelisierung

14

Zusammenfassung

Vorlesung Übersetzer I WS 1999/2000 / Folie 01 Ziele: Inhaltsübersicht zur Vorlesung in der Vorlesung: Erläuterungen dazu Verständnisfragen:

U-1a

Voraussetzungen aus Vorlesung

Thema

Grundlagen der Programmiersprachen: 4 Ebenen der Sprachdefinitionen

Modellierung:

hier benötigt für

Übersetzeraufgaben, -struktur

kontextfreie Grammatiken

Syntaktische Analyse

Gültigkeitsbereiche

Bezeichneridentifikation

Datentypen

Typanalyse

Lebensdauer, Laufzeitkeller

Speichermodell, Code-Erzeugung

endliche Automaten

Lexikalische Analyse

Vorlesung Übersetzer I WS 1999/2000 / Folie 01a Ziele: Konkrete Themen aus anderen Vorlesungen identifizieren in der Vorlesung: Hinweise auf Skripten zum Nachlernen nachlesen: Skript zu Grundlagen der Programmiersprachen Verständnisfragen: • Haben Sie die Voraussetzungen? • Wollen Sie den Stoff nacharbeiten oder wiederholen?

U-2

Literatur Skript zu Übersetzer I (WS 1999/2000): http://www.uni-paderborn.de/fachbereich/AG/agkastens/uebi/index_dt.html Skript zu Übersetzer (WS 1997/98, entspricht Übersetzer I und II): http://www.uni-paderborn.de/fachbereich/AG/agkastens/compiler/index_dt.html

U. Kastens: Übersetzerbau, Handbuch der Informatik 3.3, Oldenbourg, 1990 (nur in der Uni-Bibliothek, nicht mehr im Handel) W. M. Waite, L. R. Carter: An Introduction to Compiler Construction, Harper Collins, New York, 1993 W. M. Waite, G. Goos: Compiler Construction, Springer-Verlag, 1983

© 2000 bei Prof. Dr. Uwe Kastens

R. Wilhelm, D. Maurer: Übersetzerbau - Theorie, Konstruktion, Generierung, Springer-Verlag, 1992 A. Aho, R. Sethi, J. D. Ullman: Compilers - Principles, Techniques and Tools, Addison-Wesley, 1986 A. W. Appel: Modern Compiler Implementation in C, Cambridge University Press, 1997 (auch in Java und in ML)

Vorlesung Übersetzer I WS 1999/2000 / Folie 02 Ziele: Für die Vorlesung nützliche Litaratur kennenlernen in der Vorlesung: Erläuterungen zur Verwendung der Skripten und Bücher • Das Skript zur Vorlesung "Übersetzer I (WS 1999/2000)" entsteht neu im Laufe der Vorlesung aus dem u.g. Skript. • Das Skript "Übersetzer (WS 1997/98)" beschreibt eine Vorlesung, die doppelten Umfang hatte und stärker in die Tiefe ging. Es kann deshalb als Quelle für weitergehende und vertiefende Information verwendet werden. • Das Buch "Übersetzerbau" ist nicht mehr im Handel. Verständnisfragen: • Suchen Sie die Skripte im WWW, machen Sie sich mit ihrer Struktur vertraut und legen Sie sich Bookmarks an.

U-3

Was übersetzt ein Übersetzer? Ein Übersetzer transformiert korrekte Sätze einer Quellsprache in gleichbedeutende Sätze einer Zielsprache.

© 1999 bei Prof. Dr. Uwe Kastens

Beispiele: Quellsprache:

Zielsprache:

Programmiersprache C++

Maschinensprache Sparc-Code

Programmiersprache Java

Abstrakte Maschine Java-Byte-Code

Programmiersprache C++

Programmiersprache(Source-to-Source) C

Anwendungssprache LaTeX DB-Sprache (SQL)

Anwendungssprache HTML DB-Systemaufrufe

Ein Interpretierer führt Sätze einer Quellsprache aus. Beispiele: Lisp, Shell-Kommandosprache, Java-Byte-Code

Vorlesung Übersetzer I WS 1999/2000 / Folie 03 Ziele: • Vielfalt des Einsatzes von Übersetzern erkennen • Abgrenzung zu Interpretierern in der Vorlesung: • Beispiele für verschiedene Quell-/Zielsprachen-Paare nachlesen: Kastens / Übersetzerbau, Abschnitt 1. Übungsaufgaben: • Weitere Beispiele für Anwendungssprachen finden (Vorlesung) • Aufgabe 3 Strukturen in Zielprogrammen zu einfachen Quellprogrammen erkennen Verständnisfragen: Nennen Sie Gründe für die Übersetzung in andere als Maschinensprachen. Warum wird Lisp meist interpretiert statt übersetzt?

U-3a

© 1999 bei Prof. Dr. Uwe Kastens

Was wird hier übersetzt? class Average { private: int sum, count; public: Average (void) { sum = 0; count = 0; } void Enter (int val) { sum = sum + val; count++; } float GetAverage (void) { return sum / count; } }; -------------_Enter__7Averagei: pushl %ebp movl %esp,%ebp movl 8(%ebp),%edx movl 12(%ebp),%eax addl %eax,(%edx) incl 4(%edx) L6: movl %ebp,%esp popl %ebp ret

class Average { private int sum, count; public Average () { sum = 0; count = 0; } void Enter (int val) { sum = sum + val; count++; } float GetAverage () { return sum / count; } }; --------------1: Enter: (int) --> void Access: [] Attribute ‚Code‘ (Length 49) Code: 21 Bytes Stackdepth: 3 Locals: 2 0: aload_0 1: aload_0 2: getfield cp4 5: iload_1 6: iadd 7: putfield cp4 10: aload_0 11: dup 12: getfield cp3 15: iconst_1 16: iadd

Vorlesung Übersetzer I WS 1999/2000 / Folie 03a Ziele: Übersetzungen an Beispielen erkennen in der Vorlesung: Fragen beantworten. Verständnisfragen: • Welches sind hier die Quell- und Zielsprachen? • Woran haben Sie sie erkannt?

U-3b

© 1999 bei Prof. Dr. Uwe Kastens

Was wird hier übersetzt? program Average; var sum, count: integer; aver: integer; procedure Enter (val: integer); begin sum := sum + val; count := count + 1; end; begin sum := 0; count := 0; Enter (5); Enter (7); aver := sum div count; end. ----------void ENTER_5 (char *slnk , int VAL_4) { {/* data definitions: */ /* executable code: */ { SUM_1 = (SUM_1)+(VAL_4); COUNT_2 = (COUNT_2)+(1); ; } }}/* ENTER_5 */

\documentstyle[12pt]{article} \begin{document} \section{Introduction} This is a very short document. It just shows \begin{itemize} \item an item, and \item another item. \end{itemize} \end{document} ------------%%Page: 1 1 1 0 bop 164 315 a Fc(1)81 b(In)n(tro)r(duction) 164 425 y Fb(This)16 b(is)g(a)h(v)o(ery)e(short) i(do)q(cumen)o(t.)j(It)c(just)g (sho)o(ws)237 527 y Fa(\017)24 b Fb(an)17 b(item,) c(and)237 628 y Fa(\017)24 b Fb(another)17 b(item.) 961 2607 y(1)p eop

Vorlesung Übersetzer I WS 1999/2000 / Folie 03b Ziele: Übersetzungen an Beispielen erkennen in der Vorlesung: Fragen beantworten. Verständnisfragen: • Welches sind hier die Quell- und Zielsprachen? • Woran haben Sie sie erkannt?

U-3c

Sprachen in der Software-Entwicklung: Spezifikation und Modellierung UML Unified Modeling Language:

© 1999 bei Prof. Dr. Uwe Kastens

SDL (CCITT) Specification and Description Language:

Vorlesung Übersetzer I WS 1999/2000 / Folie 03c Ziele: Spezifikationssprachen in der Software-Technik in der Vorlesung: Erläuterungen zu SDL und UML nachlesen: Text Verständnisfragen: Welche Arten von Werkzeugen benötigt man zu solchen Spezifikationssprachen?

U-3d

Sprachen in der Software-Entwicklung Domain-Specific Languages (DSL) Sprache zugeschnitten auf ein spezielles Anwendungsgebiet Application Generator: Implementierung einer DSL durch einen Programmgenerator Beispiele: • Simulation mechatronischer Regelsysteme • Robotersteuerung • Meßdatenerfassung • Steuerung von Prüfständen für Kfz-Instrumente • Literatur-Report-Generator:

© 1999 bei Prof. Dr. Uwe Kastens

string name = int since = int cnt = 0;

InString "Which author?"; InInt "Since which year?";

"\nPapers of ", name, " since ", since, ":\n"; [ SELECT name