Übersetzung von künstlichen sprachen formale sprachen und Übersetzer

37
Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

Upload: kyler-schillo

Post on 05-Apr-2015

146 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

Übersetzung von künstlichen Sprachen

Formale Sprachen und Übersetzer

Page 2: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

2

Agenda

1. Motivation

2. Formale Sprachen

3. Compiler

4. Compilerentwicklung

5. Ausblick

Page 3: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

3

Agenda

1. Motivation2. Formale Sprachen

3. Compiler

4. Compilerentwicklung

5. Ausblick

Page 4: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

4

Compiler

Werkzeug in der Softwareentwicklung

Klassische Aufgaben eines Compilers

Übersetzung eines Programms aus einer Quellsprache A in eine

Zielsprache B

Fehlermeldung und Fehlerbehandlung

Page 5: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

5

Compiler vs. Interpreter

Interpreter = direkte Programmausführung

Compiler sind schneller und

effizienter

Kompilierte Programme ohne

Compiler ausführbar

Page 6: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

6

Agenda

1. Motivation

2. Formale Sprachen3. Compiler

4. Compilerentwicklung

5. Ausblick

Page 7: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

7

Formale Sprachen

Grundlage der systematischen Sprachanalyse

Beim Entwurf von Programmiersprachen und bei der Analyse von

Programmen eingesetzt

Beispiele für formale Sprachen:

Programmiersprachen, wie C oder Java

Abfragesprachen wie SQL

Algebraische Ausdrücke

...

Page 8: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

8

Terminologie

Alphabet

Ein Alphabet Σ ist eine endliche, nicht leere Menge von Symbolen

Wort

Ein Wort ω über Σ ist eine endliche Folge von Symbolen aus Σ. Das leere

Wort wird mit ε bezeichnet. Σ* ist die Menge aller Worte über Σ

Formale Sprache

Eine Sprache L ist eine Teilmenge von Σ*

Page 9: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

9

Terminologie

Produktion

Eine Produktion P ist eine Vorschrift zur Ersetzung von Wörtern durch

andere Wörter

Formale Grammatik

Eine formale Grammatik G beschreibt Regeln, wie aus einem Alphabet Σ

Worte ω einer bestimmten Sprache L gebildet werden

Page 10: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

10

Formale Grammatiken

Eine formale Grammatik G ist ein Vierer-Tupel (N, Σ, P, S):

N = Menge der Nichtterminalsymbole

Σ = Menge der Terminalsymbole

N und Σ sind zueinander disjunkt, es gilt somit N Σ =

X := N Σ ist das Totalalphabet

P ist die endliche Menge der Produktionen oder Ableitungsregeln

S N bezeichnet das Startsymbol

Formale Grammatiken erzeugen formale Sprachen Synthese

Formale Grammatiken werden zur Sprachanalyse

eingesetzt Analyse

Page 11: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

11

Anwendung von Ableitungsregeln

Vorgehensweise:

Ausgangspunkt ist das Startsymbol S

S gemäß Produktion durch rechte Seite der Produktion ersetzen

Falls das resultierende Wort noch Nichtterminalsymbole enthält,

Anwendung einer weiteren Produktion

Wiederholung so lange, bis das resultierende Wort nur noch

Terminalsymbole enthält

Beispiel: G = { {A,B}, {a,b}, {P1: A a, P2: B b}, {AB} }

1. Anwendung von P1 ω = aB

2. Anwendung von P2 ω = ab

Page 12: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

12

Chomsky-Hierarchie

1956 von Noam Chomsky entwickelt

Typ-0 Grammatik: Unbeschränkte Grammatik

Keinerlei Einschränkungen

Typ-1 Grammatik: Kontextsensitive Grammatik

P1: αAβ αγβ, mit A N, γ X\{ε} , α, β X*

P2: S ε

Terminalsymbole auf der linken Seite einer Produktionsregel erlaubt

Page 13: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

13

Chomsky-Hierarchie

Typ-2 Grammatik: Kontextfreie Grammatik

P: A α, mit A N und α X*

Terminalsymbole nicht auf der linken Seite einer Produktionsregel erlaubt

Definition der syntaktischen Struktur

Typ-3 Grammatik: Reguläre Grammatik

P1: A Bω oder P1: A ωB

P2: A ω, mit A, B N und ω Σ *

Definition der lexikalischen Struktur

Page 14: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

14

Agenda

1. Motivation

2. Formale Sprachen

3. Compiler4. Compilerentwicklung

5. Ausblick

Page 15: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

15

Phasen der Übersetzung

Lexikalische Analyse

Syntaktische Analyse

Semantische Analyse

Zwischencode-Erzeugung

Codeoptimierung

Code-Erzeugung

Symboltabellenverwaltung

Fehlermeldung und Fehlerbehandlung

Lexikalische Analyse

Syntax-Analyse

Semantische Analyse

Zwischencode-Erzeugung

Code-Optimierung

Code-Erzeugung

Symboltabellen-

verwaltung

Fehler-behandlung

Analyse

Synthese

Page 16: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

16

Lexikalische Analyse (Scanning)

Aufteilung des Stroms von Eingabezeichen in Symbole

Überprüfung auf gültige Eingabezeichen

Herausfiltern von Leerzeichen und Symbolen

Mögliches Beispiel: Ausdruck A = 2*b+6

Bezeichner: A, b

Zahlen: 2, 6

Zuweisungssymbol: = Symboltabelle

Pluszeichen: +

Multiplikationszeichen: *

}Id Symbol Attribute

1 A ...

2 = ...

3 2 ...

4 * ...

5 b ...

6 + ...

7 6 ...

Page 17: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

17

Syntaxanalyse (Parsing)

Überprüfung auf syntaktische Korrektheit

Konstruktion eines Syntaxbaums aus der Symboltabelle

Mögliches Beispiel:

Page 18: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

18

Semantische Analyse

Typüberprüfung

Eindeutigkeitsprüfung

Gültigkeitsprüfung

Erweiterung der Symboltabelle

Erweiterung des Syntaxbaums

Page 19: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

19

Zwischencode-Erzeugung

Reduktion der Komplexität des Kompiliervorgangs

Erzeugung einer maschinenunabhängigen Form

Zwischencode ist portierbar

Mögliches Beispiel: Drei-Adress-Code

temp1 := 6

temp2 : = 2

temp3 := id5 * temp2

temp4 := temp3 + temp1

id1 := temp4

Id Symbol Attribute

1 A ...

2 = ...

3 2 ...

4 * ...

5 b ...

6 + ...

7 6 ...

Page 20: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

20

Code-Optimierung

Auffinden und Beseitigen von Ineffizienzen

Benutzung maschinenspezifischer Befehle

Elimination von nicht erreichbaren Programmcode

Optimierung von Schleifen

Einsparung von Maschinenbefehlen

Beispiel:

temp1 := id5 * 2

id1 := temp1 + 6

Page 21: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

21

Code-Erzeugung

Erzeugung des finalen Zielcodes

Umwandlung der Instruktionen in funktionserhaltende Folgen von

Maschinenbefehlen

Speicherallokation für die im Programm verwendeten Variablen

Mögliches Beispiel:

MOV id5, R1

MUL 2, R1

ADD 6, R1

MOV R1, id1

Page 22: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

22

Symboltabellenverwaltung

Querschnittsfunktion

Symboltabelle = Datenstruktur mit Informationen über Symbole

Schnelles Auffinden von Informationen

Schnelles Abspeichern von Daten

Oftmals Implementierung in Form einer Hash-TabelleId Symbol Attribute

1 A ...

2 = ...

3 2 ...

4 * ...

5 b ...

6 + ...

7 6 ...

Page 23: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

23

Fehlerbehandlung und -meldung

Querschnittsfunktion

Fortführung des Kompiliervorgangs nach Auftreten eines Fehlers

Großteil der Fehler in den Phasen Syntaxanalyse und semantische

Analyse

Beispiel:

String s = 5;

Page 24: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

24

Systemumgebung eines Compilers

Präprozessor

Vorbereitung und Erzeugung der Eingabe

Assembler

Übersetzung von Assemblersprache in die

Zielsprache

Lader/Binder

Anfordern von Speicherbereichen, Umrechnung

von relative in absolute Adressen und Laden

des Programms in den Arbeitsspeicher

Zusammenstellung des Programms aus einzelnen

Programmmodulen

Präprozessor

Compiler

Assembler

Lader/Binder

Rohes Quellprogramm

Quellprogramm

Ziel-Assemblerprogramm

Verschiebbarer Maschinencode

Ausführbarer Maschinencode

Page 25: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

25

Werkzeuge

Parser-Generatoren

Automatische Erzeugung eines Parsers mit Hilfe kontextfreier Grammatiken

Scanner-Generatoren

Automatische Erzeugung eines Scanners anhand einer Spezifikation

Syntaxgesteuerte Übersetzungsmaschinen

Automatische Zwischencode-Erzeugung auf Basis eines Syntaxbaums

Automatische Code-Generatoren

Umwandlung von Zwischencode-Anweisungen in Zielcode

Datenflussmaschinen

Optimierung des Datenflusses

Page 26: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

26

Agenda

1. Motivation

2. Formale Sprachen

3. Compiler

4. Compilerentwicklung5. Ausblick

Page 27: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

27

Planung eines Compilers

Gegebenheiten der Quellsprache

Größe der Sprache problematisch!!

Ausdehnungsgeschwindigkeit der Sprache

Gegebenheiten der Zielsprache

Überprüfung auf Korrektheit

Überprüfung des Laufzeitverhaltens

Page 28: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

28

Planung eines Compilers

Aspekte der Leistungsfähigkeit

Compilergeschwindigkeit

Codequalität

Fehlerdiagnostik

Portabilität

Wartungsfreundlichkeit

Page 29: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

29

Planung eines Compilers

Entwicklungsumgebungen und Werkzeuge

make-Befehl (UNIX)

Profiler

Lex

Yacc

Testen und Wartung

Regressions-Tests

Code-Kommentierungen

Dokumentation

Page 30: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

30

Bootstrapping

Methode zur schrittweisen Compilerentwicklung

Darstellungsform: T-Diagramm

S = Quellsprache

T = Zielsprache/Zielmaschine

I = Implementierungssprache

C = Compilername

S C T

I

Page 31: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

31

Schrittweise Entwicklung mittels Bootstrapping

Ziel: Implementierung eines C-Compilers für eine Linux-Maschine

Schritt 1:

C C1 Linux ‘

Linux ‘

C C2 Linux

C C C1 Linux ‘

Linux ‘

C2 programmierenC1 gegeben

Page 32: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

32

Schrittweise Entwicklung mittels Bootstrapping

Schritt 2:

C C2 Linux

C C C1 Linux ‘

Linux ‘

C C3 Linux

Linux ‘

C2 durch C1 kompilieren

Page 33: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

33

Schrittweise Entwicklung mittels Bootstrapping

Schritt 3:

C C2 Linux

C C C1 Linux ‘

Linux ‘

C C3 Linux

Linux ‘

C C4 Linux

C

C4 programmieren

Page 34: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

34

Schrittweise Entwicklung mittels Bootstrapping

Schritt 4:

C C2 Linux

C C C1 Linux ‘

Linux ‘

C C3 Linux

Linux ‘

C C4 Linux

C

C4 durch C3 kompilieren

C C5 Linux

Linux

Page 35: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

35

Agenda

1. Motivation

2. Formale Sprachen

3. Compiler

4. Compilerentwicklung

5. Ausblick

Page 36: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

36

Zusammenfassung und Ausblick

Compiler übersetzen Programme von einer Quellsprache A in eine

Zielsprache B

Formale Sprachen bilden die Basis

Übersetzungsvorgang umfasst verschiedene Phasen

Diverse Programme und Werkzeuge zur Unterstützung

Bootstrapping als Methode zur schrittweisen Compilerentwicklung

Compiler sind von enormer Bedeutung in der Software-Entwicklung

Viele Herausforderungen im Bereich des Compilerbaus noch zu meistern

Beispiel: Automatische Übersetzung natürlicher Sprachen

Page 37: Übersetzung von künstlichen Sprachen Formale Sprachen und Übersetzer

37

Ende

Fragen ????