• Keine Ergebnisse gefunden

SoSe 2004, Universität Bremen

N/A
N/A
Protected

Academic year: 2021

Aktie "SoSe 2004, Universität Bremen"

Copied!
9
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Übersetzergenerierung mit lex und yacc

Jan Bredereke

SoSe 2004, Universität Bremen

0. Überblick und Organisatorisches

Motivation

Übersetzer: Grundlegende Werkzeuge

– „welche Fehler kann er finden?“

– „Konstrukt wie effizient übersetzen?“

„Eingabe Ausgabe“ = Übersetzer

– auch: Benutzerinteraktion

– strukturierte Ein-/Ausgabe:

domain specific languages (DSLs)

– ständig neue „kleine“ Sprachen

Übersetzer großenteils automatisch generierbar

– Generator-Eingabe:

DSL-Beschreibung (in Meta-Sprache)

Inhalte der Vorlesung

1.Einführung

2.Lexikalische Analyse 3.Der Textstrom-Editor sed

4.Der Scanner-Generator lex (2 Termine)

5.Syntaxanalyse und der Parser-Generator yacc (3 T.) 6.Semantische Analyse

7.Transformation und Code-Erzeugung (?)

8.Übersetzungssteuerung mit make

(2)

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 5

Organisatorisches

Vortragender

– Dr. Jan Bredereke, brederek@tzi.de, MZH 8200 Zeiten

– montags 8:15–9:45 oder 8:30–10:00?

Voraussetzung

– Vordiplom Web-Seiten

– www.tzi.de/agbs/lehre/ss04/uegen/

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 6

Literatur

Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman.

Compilerbau, Teil 1.

Oldenbourg, 2. Aufl. (Dez. 1999).

ISBN 3-486-25294-1.

N. N.

sed(1) Manual-Seite.

In: LunetIX Linuxhandbuch (Juli 1993).

Mike Haertel, James A. Woods und David Olson.

grep(1) Manual-Seite.

In: LunetIX Linuxhandbuch (Juli 1993).

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 7

Literatur (2)

John R. Levine, Tony Mason und Doug Brown.

lex & yacc.

O'Reilly, zweite korrigierte Auflage (1995).

ISBN 1-56592-000-7.

Vern Paxson.

Flex, version 2.5 - A fast scanner generator.

University of California (1990).

Charles Donelly and Richard Stallman.

Bison - The YACC-compatible parser generator.

Version 1.75. Free Software Foundation (2002).

ISBN 1-882114-44-2. GNU Free Documentation License.

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 8

Literatur (3)

R. Stallman, R. McGrath und P. Smith.

GNU Make - A Program for Directing Recompilation.

Version 3.80. Free Software Foundation (Juli 2002).

ISBN 1-882114-81-7. GNU Free Documentation

License.

(3)

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 9

Software

lex & yacc

– flex & bison

auf allen Uni-Rechnern

in allen großen Linux-Distributionen Windows: im freien Cygwin-Paket sed, grep, make

– ebenso verfügbar Download-Links

– www.tzi.de/agbs/lehre/ss04/uegen/

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 10

Scheinkriterien-Vorschlag

keine Übungsaufgaben, da reine Vorlesung

– deswegen 2 ECTS

mündliche Prüfung am Ende

– 20-30 min. pro Kandidat

– auf Wunsch mit Beisitzer

1. Einführung

Universelle programmierbare Rechenmaschine

L-Maschine

– kann beliebige Programme einer Sprache L ausführen

Ausführung eines Programms

– symbolisiert durch:

L-Maschine

Eingabe Ausgabe

L-Programm

L ? A E

L

(4)

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 13

Interpreter

simuliert L-Maschine durch M-Programm

– L-Maschine: problemorientiert, virtuell

– M-Maschine: existiert real

L

? A E

M M L

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 14

Übersetzer

übersetzt L-Programme in M-Programme M-Programm ist direkt ausführbar

L

?

M ? M L

M M

M ? ?

? M

Quellprogramm Zielprogramm

Übersetzer

Übersetzung Ausführung

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 15

Programme rund um einen Übersetzer

Präprozessor

Übersetzer

Assembler

Lader und Binder

erweitertes Quellprogramm

Quellprogramm

Assemberprogramm

verschiebbarer Maschinencode

ausführbarer Maschinencode

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 16

Die Phasen der Übersetzung

Symbol- tabellen- verwaltung

Fehler- behandlung Quellprogramm (Text)

attributierter Syntaxbaum Analyse

Synthese

Zielprogramm (Assemblerprogramm)

(5)

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 17

Die Analysephasen

lexikalische Analyse

Syntax- analyse

semantische Analyse

Quellprogramm (Text)

attributierter Syntaxbaum Symbolstrom

Syntaxbaum Symbol-

tabellen- verwaltung

Fehler- behandlung

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 18

Die Synthesephasen

Zwischencode- erzeugung

Optimierung

Code- erzeugung

attributierter Syntaxbaum

Zielprogramm (Assemberprogramm) Zwischencode

Zwischencode Symbol-

tabellen- verwaltung

Fehler- behandlung

Lexikalische Analyse

position := initial + rate * 60

position := initial + rate * 60

Bezeichner :=

(Zuweisungs- symbol)

+

(Addit.- Symbol)

Bezeichner Bezeichner *

(Mult.- Symbol)

Zahl

“position“ “initial“ “rate“ 60

Gruppierung der Eingabezeichen in Lexeme

– Leerzeichen werden entfernt Zuordnung Lexem Symbol

– Symbole (Token): Bezeichner, := , + , * , Zahl, ...

– Symbol hat z.T. Wert als Attribut

Syntaxanalyse (Parsing)

hierarchische Gruppierung der Symbole

– mit Hilfe einer kontextfreien Grammatik

Zuweisung

Bezeichner Ausdruck

position :=

+

* initial

Ausdruck Ausdruck

Bezeichner

Zahl 60 Ausdruck

rate

Ausdruck

Bezeichner

Parse-Baum:

(6)

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 21

Syntaxbaum

ist komprimierte Darstellung des Parse-Baums

position :=

+ initial *

60 rate

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 22

Semantische Analyse

sammelt Typinformationen für Codeerzeugung

– nutzt hierarchische Struktur des Syntaxbaums Typüberprüfungen

– ggf. automatische Typkonversionen attributierter

Syntaxbaum:

position :=

+ initial *

rate real

real

real 60

integer inttoreal

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 23

Symboltabellenverwaltung

sammelt und speichert die Attribute der Bezeichner

– Typ

– Gültigkeitsbereich

– bei Prozedurnamen: Anzahl & Typen der Argumente, ...

– Details zum Speicherbereich (bei Codeerzeugung)

– ...

Nr. Name Typ ...

1 position real ...

2 initial real ...

3 rate real ...

4 ... ...

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 24

Fehlerbehandlung

in jeder Phase

jeder Fehler muß behandelt werden

– Ziel: weiterarbeiten, um möglichst viele Fehler zu finden

(7)

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 25

Erinnerung: Die Synthesephasen

Zwischencode- erzeugung

Optimierung

Code- erzeugung

attributierter Syntaxbaum

Zielprogramm (Assemberprogramm) Zwischencode

Zwischencode Symbol-

tabellen- verwaltung

Fehler- behandlung

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 26

Zwischencodeerzeugung

Zwischencode: Programm für eine abstrakte Maschine

– leicht zu erzeugen

– leicht in Zielsprache zu übersetzen

– hier: Drei-Adreß-Code

jede Instruktion hat höchstens drei Operanden

temp1 := inttoreal(60) temp2 := bezeichner3 * temp1 temp3 := bezeichner2 + temp2 bezeichner1 := temp3

Optimierung

versucht, Zwischencode zu verbessern

– schnellere Ausführung

– weniger Speicherplatz

temp1 := bezeichner3 * 60.0 bezeichner1 := bezeichner2 + temp1

Codeerzeugung

Variable Speicherplatz Zwischencode-Instruktion

Folge von Maschinenbefehlen Register Variable

MOVF bezeichner3, R2 MULF #60.0, R2 MOVF bezeichner2, R1 ADDF R2, R1

MOVF R1, bezeichner1

(8)

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 29

Front-End

Phasen(-anteile), die von Quellsprache abhängen

– lexikalische Analyse

– syntaktische Analyse

– Symboltabellenerstellung

– semantische Analyse

– Zwischencodeerzeugung

– Optimierung, maschinenunabhängig

– Fehlerbehandlung für obige Phasen

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 30

Back-End

Phasen(-anteile), die von Zielsprache abhängen

– Optimierung, maschinenabhängig

– Codeerzeugung

– weitere Symboltabellenoperationen

– Fehlerbehandlung für obige Phasen

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 31

UNCOL-Ansatz

Universal Communication Oriented Language

– universelle Zwischensprache (Idee ca. 1960):

– Vorteil: viel weniger Übersetzer nötig

leider gibt es keine effiziente Sprache UNCOL

– Sprachen zu verschieden

– Rechner zu verschieden

UNCOL

L

2

L

n

L

1

M

1

M

2

M

n

...

...

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 32

Beispiel Java:

braucht nur einen Übersetzer Java Byte-Code geht

– aber gute Definition eines Zwischencodes immer noch schwierig

Zwischensprache für nur eine Quellsprache

Byte-Code Java

M

1

M

2

... M

n

(9)

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 33

Läufe vs. Phasen

Läufe (Pässe):

nacheinander ablaufende Teilprogramme des Übersetzers

Phasen:

funktional unabhängige Teilaufgaben

– kein Feedback

oft mehrere Phasen in einem Lauf

– effizienter

– Beispiel: lexikalische + syntaktische Analyse Puffer für max. ein Lexem Vorausschau

Scanner liefert Lexem auf Anforderung des Parsers

Übersetzergenerierung – Überblick & Einführung Jan Bredereke, Universität Bremen 34

Übersetzerbauwerkzeuge

allgemeine Software-Werkzeuge Scanner-Generatoren

Parser-Generatoren

syntaxgesteuerte Übersetzungsmaschinen

– Parse-Baum Zwischencode automatische Codegeneratoren Datenflußmaschinen

– Datenflußanalyse für Codeoptimierung

yacc lex

Inhalte der Vorlesung

1.Einführung

2.Lexikalische Analyse 3.Der Textstrom-Editor sed

4.Der Scanner-Generator lex (2 Termine)

5.Syntaxanalyse und der Parser-Generator yacc (3 T.) 6.Semantische Analyse

7.Transformation und Code-Erzeugung (?)

8.Übersetzungssteuerung mit make

Referenzen

ÄHNLICHE DOKUMENTE

„tief“ (rekursiv) gleich In Java: equals() auf Objekten, wenn equals() für alle beteiligten Klassen geeignet definiert ist equals() in Klasse Object entspricht nur ==, muss also

Es wird immer nach einem Sortierkriterium sortiert (Sortierschlüssel) Der Sortierschlüssel kann sich aus mehreren Teilen

Falls in Tabelle gefunden, dann ersten Überläufer aus der Liste aushängen und Eintrag in Tabelle überschreiben Falls in Überläuferliste gefunden, dann einfach aus der

(4) Werden einer Kommission oder einem Ausschuss durch Beschluss des Akademischen Se- nats oder allgemein durch Satzung Entscheidungsbefugnisse übertragen, die die Lehre betreffen,

z Aushänge außerhalb der Infowände werden entfernt; dies gilt auch für Aushänge auf den Kopfleisten der Infowände.. z Auch Aushänge, die über aktuelle Informationen

Die Veranstaltung hat mein Interesse an dem Thema

(3) Anfragen, die innerhalb einer Sitzung des Gremiums gestellt und nicht unmittelbar beantwortet werden können, sind innerhalb von drei Wochen zu beantworten, ansonsten

(9) Nach Ablauf der Frist des Absatzes 8 sind die schriftlichen Habilitationsleistungen, die Gutach- ten und ggf. die Stellungnahme des Bewerbers oder der Bewerberin vier Wochen