Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann...

50
Sprachtechnologie und Compiler Prof. Dr.-Ing. Gregor Snelting [email protected] Institut f¨ ur Programmstrukturen und Datenorganisation Universit¨ at Karlsruhe (TH) Wintersemester 2008/09 Folien basierend auf dem Skript von Prof. em. Dr. Dr. h.c. Gerhard Goos Einleitung Wintersemester 2008/09 1 / 50

Transcript of Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann...

Page 1: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Sprachtechnologie und Compiler

Prof. Dr.-Ing. Gregor [email protected]

Institut fur Programmstrukturen und DatenorganisationUniversitat Karlsruhe (TH)

Wintersemester 2008/09

Folien basierend auf dem Skript vonProf. em. Dr. Dr. h.c. Gerhard Goos

Einleitung Wintersemester 2008/09 1 / 50

Page 2: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Kapitel 1Einleitung

Einleitung Wintersemester 2008/09 2 / 50

Page 3: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Organisatorisches

Vorlesung

Die Veranstaltung ist prufbar (bis zu 4SWS)

Homepage:http://pp.info.uni-karlsruhe.de/lehre/WS200809/compiler

Achtung: Am 18. + 19.11. ausnahmsweise in SR 301

Kontakt: [email protected]

Ubung

Mittwochs findet um 14 Uhr eine Ubung in HS-101 statt.

Achtung: Am 19.11. ausnahmsweise in SR-120

Kontakt: [email protected]

Einleitung Wintersemester 2008/09 3 / 50

Page 4: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Organisatorisches - weiterfuhrende Veranstaltungen

Im Sommersemester bieten wir vertiefende Veranstaltungen an:Compilerpraktikum

Entwurf und vor allem Implementierung eines Compilers fur(Mini-)Java in Kleingruppen

lexikalische, syntaktische und semantische Analyse, einfacheOptimierungen, Codeerzeugung

2 SWS in Prufung anrechenbar

Compiler II

Themen: Fortgeschrittene Programmanalysetechniken,Registerzuteilung, Cache-Optimierungen,Schleifentransformationen

2 SWS, prufbar

Einleitung Wintersemester 2008/09 4 / 50

Page 5: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Studien- und Diplomarbeiten

Der Lehrstuhl bietet Studien- und Diplomarbeiten im BereichCompiler Construction, Programmanalyse / Programmslicing,sowie maschinelle Verifikation an.

Wir suchen Hiwis zur Mitarbeit im libFirm(http://www.libfirm.org) Projekt, einer modernengraphbasierten Compilerzwischensprache.

Einleitung Wintersemester 2008/09 5 / 50

Page 6: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

1 Motivation und Literatur

2 Ubersetzungsarten

3 Architektur/PhasenArchitekturAnalyseTransformationCodierungDatenstrukturen

Einleitung Wintersemester 2008/09 6 / 50

Page 7: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Warum ist Sprachtechnologie interessant?

Querschnittstechnologie mit breitem Anwendungsbereich inder Softwaretechnik

altestes Gebiet der praktischen Informatik

Modell fur erfolgreiche theoretische Fundierung praktischerEntwicklungen

stabile Software-Architektur: Musterbeispiel fur softwareengineering bei mittelgroßen sequentiellen Software-Systemen

hohe Korrektheits- und Zuverlassigkeitsforderungen

Einleitung Wintersemester 2008/09 7 / 50

Page 8: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Warum ist Sprachtechnologie interessant?

grundlegend fur Weiterentwicklungen derProgrammiermethodik

grundlegend fur Weiterentwicklung derProzessor-/Software-Schnittstelle

liefert die Standardmethoden fur die Verarbeitung textuellerEingaben und zur Generierung von Programmen ausSpezifikationen

viele Anwendungen im Software Engineering:Textformatierung, Programmanalyse,Programmtransformationen, automatische Anwendung vonEntwurfsmustern, Metaprogrammierung, Verarbeitung vonXML, Refaktorisierung, Software-Sicherheitsanalyse, Metriken,. . .

Einleitung Wintersemester 2008/09 8 / 50

Page 9: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Literatur - Lehrbucher

Andrew W. Appel, Jens PalsbergModern Compiler Implementation in JavaCambridge University PressISBN: 052182060X

Alfred V. Aho, Monica S. Lam, Ravi SethiCompiler. Prinzipien, Techniken und ToolsPEARSON STUDIUMISBN: 3827370973

Einleitung Wintersemester 2008/09 9 / 50

Page 10: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Weiterfuhrende Literatur

Reinhard Wilhelm, Helmut SeidlUbersetzerbauSpringerISBN: 9783540495963

Keith Cooper, Linda TorczonEngineering a CompilerMorgan KaufmannISBN: 978-1-55860-699-9

Einleitung Wintersemester 2008/09 10 / 50

Page 11: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Weiterfuhrende Literatur

Robert MorganBuilding an Optimizing CompilerDigital PressISBN: 155558179X

Steven MuchnickAdvanced Compiler Design andImplementationMorgan KaufmannISBN: 978-1-55860-320-2

Einleitung Wintersemester 2008/09 11 / 50

Page 12: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Weiterfuhrende Literatur

Y. N. Srikant, Priti ShankarThe Compiler Design Handbook:Optimizations and Machine CodeGenerationCRC Press IncISBN: 142004382X

Einleitung Wintersemester 2008/09 12 / 50

Page 13: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Anwendungsfelder

Text → Information

Textanalyse (Beispiel: LATEX, Word, Konfigurationsdateien)Programmanalyse (Beispiel: Software-Sanierung)

Text → Text

Quell-Quell-Transformation (Beispiel: Praprozessor, UMLnach C)

Programm → Stackcode

Beispiel: Java Byte Code, .NET CLI

Programm → Maschinencode

Beispiel: Alle C-Ubersetzer

Einleitung Wintersemester 2008/09 13 / 50

Page 14: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Ubersetzen

UbersetzenText aus Quellsprache in Zielsprache ubertragen unter Erhaltungder Bedeutung (bedeutungsaquivalent, semantikerhaltend)

Quell-/Zielsprache konnen identisch sein

Ziel kann maschinen-interpretierbare Sprache sein.

Bei Programmiersprachen: Semantik durch Ausfuhrung -Interpretation - des Quell-/Zieltexts gegeben

Einleitung Wintersemester 2008/09 14 / 50

Page 15: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Zielkriterien

Korrektheit

Minimaler Betriebsmittelaufwand zur Laufzeit (Rechenzeit,Speicher, Energie)

Kompatibilitat mit anderen Ubersetzern

gleicher Sprachumfang akzeptiertInteraktion mit Programmen

anderer Sprachenanderer Ubersetzerauf anderen Rechnerndynamische Verknupfung

Ubersetzungsgeschwindigkeit

Diese Ziele widersprechen sich teilweise!

Einleitung Wintersemester 2008/09 15 / 50

Page 16: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Bedeutung (Semantik)

definiert durch Komposition:

Programmtext hat Struktur (Syntax)

Bedeutung den Strukturelementen zugeordnet

Gesamtbedeutung durch Komposition

Strukturelemente imperativer Sprachen

Datentypen, Objekte (Variable, benannte Konstante, Literale)und Operationen

ablaufsteuernde Elemente

statische Strukturelemente (definieren Gultigkeitsbereiche)

also:

Programmtext hat keine Bedeutung als Text

Bedeutung erst nach Identifikation der Strukturelementeerfaßbar

Einleitung Wintersemester 2008/09 16 / 50

Page 17: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Spezifikation von Ubersetzungen

Aufzahlung:

Gib zu jedem Quellprogramm ein (oder mehrere)Zielprogramme an

Aber: Quellsprachen erlauben i.A. abzahlbar unendlich vieleElemente (Programme)

Intensionale Definition:

Kompositionalitat der Sprachen nutzen

Sprachelemente definieren Bedeutung

Ubersetzungsdefinition fur alle Sprachelemente definiert

Ubersetzung unter Nutzung der Kompositionalitat

Einleitung Wintersemester 2008/09 17 / 50

Page 18: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Anforderungsanalyse bei Ubersetzern

Festlegung der Quellsprache (Norm, Erweiterungen,Einschrankungen, . . . )

Festlegung des Niveaus der Interpretation und der Zielsprache:

abstrakte Maschine definierenAbgrenzung Hardware/LaufzeitsystemEntwurf Laufzeitsystem

Systemeinbettung: andere Ubersetzer, andere Sprachen,BS-Anschluß, ... berucksichtigen

formales Modell der Semantik zur genauen Definition von

”Korrektheit“ der Bedeutungsaquivalenz (wird leider meist

unterlassen)

Einleitung Wintersemester 2008/09 18 / 50

Page 19: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Abstrakte Maschinen

gegeben durch Typen, Objekte und Operationen, Ablaufsteuerung

Sprache definiert eine abstrakte Maschine

Objekte bestimmen die SpeicherelementeOperationen und Ablaufsteuerung die Befehle

Beispiele: virtuelle Java-Maschine, .NET CLR

Interpretation: Ausfuhrung des Programms auf der Ebene derabstrakten Maschine

Umkehrung: Jede abstrakte Maschine definiert Sprache

Einleitung Wintersemester 2008/09 19 / 50

Page 20: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

1 Motivation und Literatur

2 Ubersetzungsarten

3 Architektur/PhasenArchitekturAnalyseTransformationCodierungDatenstrukturen

Einleitung Wintersemester 2008/09 20 / 50

Page 21: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Ebenen der Interpretation bzw. Ubersetzung

Reiner Interpretierer

Vorubersetzung

Laufzeitubersetzer

Vollstandige Ubersetzung

Makrosprachen

Einleitung Wintersemester 2008/09 21 / 50

Page 22: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Reiner Interpretierer

liest Quelltext jeder Anweisung bei jeder Ausfuhrung undinterpretiert sie

billig, wenn nur einmal ausgefuhrt

sinnvoll bei Kommandosprachen

Interpreter

Quellprogramm

Eingabe

Ausgabe

Einleitung Wintersemester 2008/09 22 / 50

Page 23: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Interpretation nach Vorubersetzung

Analyse der Quelle und Transformation in eine fur denInterpretierer gunstigere Form, z.B. durch

Zuordnung Bezeichnergebrauch - VereinbarungTransformation in Postfixform

nicht unbedingt Maschinenniveau

Beispiel: Java-Bytecode, Smalltalk-Bytecode, Pascal P-Code

VirtuelleMaschine

Zwischenprogramm

Eingabe

Ausgabe

Ubersetzer

Quellprogramm

Einleitung Wintersemester 2008/09 23 / 50

Page 24: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Laufzeitubersetzer (JIT-Compiler)

Ubersetzung wahrend Programmausfuhrung1

Auszufuhrender Code wird ubersetzt und eingesetzt

schneller als reine InterpretationSpeichergewinn: Quelle kompakter als Zielprogrammlangsamer als vollstandige Ubersetzung, da nur lokaler Kontextbenutzt (es ist auch Besseres denkbar, aber schwierig)gut im Test (nur kleiner Teil des Codes ausgefuhrt)kann dynamisch ermittelte Laufzeiteigenschaftenberucksichtigen (dynamische Optimierung)

Ubersetzung mit Substitution

Beispiel: .NET, das sich wegen nicht direkt greifbarerTypinformation nicht fur Interpretation eignet

1Laufzeitubersetzung erfunden 1974, CMU

Einleitung Wintersemester 2008/09 24 / 50

Page 25: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Vollstandige Ubersetzung

Auch (maschinennahe) Zielsprache definiert eine abstrakteMaschine. Interpretierer definiert durch:

die Hardware der Zielmaschine

Betriebssystem

Laufzeitsystem (E/A-Unterprogramme, Speicherverwaltung,-bereinigung, . . . )

Quellprogramm

Compiler

Zielprogramm

Eingabe Zielprogramm Ausgabe

Einleitung Wintersemester 2008/09 25 / 50

Page 26: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Makrosprachen

Zielsprache identisch mit (Ausschnitt der) Quellsprache

Makros werden nach vorgegebenen Vorschriften ersetzt

Beispiele: Textformatierung, Textverarbeitung,Vorverarbeitung (Praprozessor) von C, C++, C#

Einleitung Wintersemester 2008/09 26 / 50

Page 27: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Ein Sprachverarbeitungssystem

Quellprogramm

Praprozessor

Modifiziertes Quellprogramm

Compiler

Assembler-Zielprogramm

Assembler

Verschiebbarer Maschinencode

Linker/LaderBibliotheksdateienVerschiebbare Objektdateien

Zielcode in Maschinensprache

Einleitung Wintersemester 2008/09 27 / 50

Page 28: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

1 Motivation und Literatur

2 Ubersetzungsarten

3 Architektur/PhasenArchitekturAnalyseTransformationCodierungDatenstrukturen

Einleitung Wintersemester 2008/09 28 / 50

Page 29: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Fließbandarchitektur eines Ubersetzer

· · ·QS ZwS1 ZwS2 ZwSn ZS

QS: Quellsprache ZwSi : Zwischensprache i ZS: ZielspracheDie Fließbandarchitektur wurde auf Grund vonSpeicherbeschrankungen eingefuhrt (pragmatische Entscheidung),nicht auf Grund einer mathematischen Notwendigkeit.

Einleitung Wintersemester 2008/09 29 / 50

Page 30: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Komponenten eines Ubersetzers

Analyselexikalische Analyse Lesen, Tokens (Symbole) erken-

nensyntaktische Analyse Strukturbaum erzeugensemantische Analyse Namens-, Typ-, Operatoranalyse,

Konsistenzprufung

AbbildungTransformation Daten abbilden, Operationen ab-

bildenglobale Optimierung Konstantenfaltung, gemeinsame

Teilausdrucke erkennen, globaleZusammenhange erkennen undnutzen, Programmreorganisation

CodierungCodeerzeugung Ausfuhrungsreihenfolge bestim-

men, Befehlsauswahl, Registerzu-teilung, Nachoptimierung

Assemblieren undBinden

interne und externe Addressenauflosen, Befehle, Addressen, Da-ten codieren

Einleitung Wintersemester 2008/09 30 / 50

Page 31: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Ubersetzung einer Zuweisungsanweisungposition = initial + rate ∗ 60

Lexikalischer Analysator

<id, 1> <=> <id,2> <+> <id,3> <*> <60>

Syntaktischer Analysator

=

<id, 1> +

<id, 2> *

<id, 3> 60

Semantischer Analysator

=

<id, 1> +

<id, 2> *

<id, 3> inttofloat

60

1 position . . .2 initial . . .3 rate . . .

...

Symboltabelle

Einleitung Wintersemester 2008/09 31 / 50

Page 32: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Ubersetzung einer Zuweisungsanweisung

=

<id, 1> +

<id, 2> *

<id, 3> inttofloat

60

Zwischencodegenerator

t1 = i n t t o f l o a t ( 6 0 )t2 = i d 3 ∗ t1t3 = i d 2 + t2i d 1 = t3

Codeoptimierer

t1 = i d 3 ∗ 6 0 . 0i d 1 = i d 2 + t1

t1 = i d 3 ∗ 6 0 . 0i d 1 = i d 2 + t1

Codegenerator

LDF R2 , i d 3MULF R2 , R2 , #60.0LDF R1 , i d 2ADDF R1 , R1 , R2STF id1 , R1

Einleitung Wintersemester 2008/09 32 / 50

Page 33: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

UNCOL

C Fortran Java

Intermediate Representation

IA-32 IA-64 SPARC

Idee von T. B. Steel, Jr.1961

UNCOL: UNiversalComputer OrientedLanguage.

Niemals direkt implementiert

Beste heutige Annaherung an UNCOL: .NET CLI/CLR

Argumente

Ablaufsteuerung in allen Sprachen fast gleichAnzahl der Basistypen gering und ahnlichOO-Eigenschaften durch Verbunde simulierbar

Einleitung Wintersemester 2008/09 33 / 50

Page 34: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Analysephase

Aufgaben:

Feststellung der bedeutungstragenden ElementeZuordnung statischer BedeutungKonsistenzprufung

Linguistik: Syntax umfasst gesamte Analysephase

Problem: Nicht mit kontextfreier Grammatik (also effizient)zerteilbar; deshalb Aufteilung

Schritte:

SymbolentschlusselungSyntaktische Analyse (Parsen)Semantische Analysenoch keine Ubersetzung! nur Analyse

Einleitung Wintersemester 2008/09 34 / 50

Page 35: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Lexikalische Analyse

zerlegt Quellprogramm (Text) in Sequenzbedeutungstragender Einheiten (Tokenstrom)

beseitigt uberflussige Zeichen(folgen) wie

Kommentare,Leerzeichen, Tabulatoren usw.

Abgetrennt von Parser, dadurch

regulare Automaten moglichGeschwindigkeit hoher

Einleitung Wintersemester 2008/09 35 / 50

Page 36: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Syntaktische Analyse

Syntaktische Analyse

liefert abstrakten Syntax(-baum) des Programms

aus softwaretechnischen Grunden deterministische kontextfreieGrammatik als Spezifikation

Einleitung Wintersemester 2008/09 36 / 50

Page 37: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Abstrakter Syntaxbaum

Beispiel:

while (r>=n) {r=r−n;q=q+1}

”r”

”n”

”q” Num 1

”r” IdExpr IdExpr

”q” IdExpr IdExpr

”r”

”n” IdExpr MinusExpr IdExpr PlusExpr

IdExpr IdExpr AssignStmt AssignStmt

GteExpr Block

WhileStmt

Einleitung Wintersemester 2008/09 37 / 50

Page 38: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Semantische Analyse

Analyse des Strukturbaums

notwendig, da Programmiersprachen kontextsensitivBedeutung von Bezeichnern

Namens- und Typanalyse

ist eng verschrankt

Konsistenzprufungen

sind Einschrankungen der ProgrammierspracheBeispiel: Statische negative Array-Grenzen

Bedeutungsbindung (soweit moglich)

OperatoridentifikationZuordnung von Namensverwendungen zu ihren Definitionen

Einleitung Wintersemester 2008/09 38 / 50

Page 39: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Transformationsphase

Transformation

eigentliche UbersetzungSpeicherlayout der Objekte auf der ZielmaschineUbersetzung der OperationenUbersetzung der AblaufsteuerungNoch kein Zielcode generiert

Optimierung

genauer: optimierende Transformationen (mitKorrektheitsnachweis)

”interessantester Teil” heutiger Ubersetzerforschung

Einleitung Wintersemester 2008/09 39 / 50

Page 40: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

40”State of the Art” Optimierungen

Address Optimization

Alias Analysis (byaddress)

Alias Analysis (bytype)

Alias Analysis (constqualified)

Array BoundsOptimization

Bitfield Optimization

Block Merging

Branch Elimination

Constant Folding

Constant Propagation

Cross Jumping

CSE Elimination

Dead CodeElimination

ExpressionSimplification

Forward Store

Function Inlining

Garbage CollectionOptimisation

Hoisting

If Optimisation

Induction VariableElimination

Instruction Combining

Integer DivideOptimization

Integer ModulusOptimization

Integer MultiplyOptimization

Loop Collapsing

Loop Fusion

Loop Unrolling

Narrowing

New ExpressionOptimization

Pointer Optimization

printf Optimization

Quick Optimization

Register Allocation

SPEC-SpecificOptimization

Static Declarations

Strength Reduction

String Optimization

Synchronized FunctionOptimization

Tail Recursion

Try/Catch BlockOptimization

Unswitching

Value RangeOptimization

Virtual FunctionOptimization

Volatile ConformanceEinleitung Wintersemester 2008/09 40 / 50

Page 41: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Codegenerierung

Codegenerierung

wahlt Befehle aus (Codeselektion)bestimmt die Ausfuhrungsreihenfolgebestimmt konkrete Reprasentation

im Speicherin Registern

Nachoptimierung

dann Assemblieren und Binden

Einleitung Wintersemester 2008/09 41 / 50

Page 42: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Modulare Struktur von Compilern

Analysis Transformation Codierung

Lexikal.Analyse

Syntakt.Analyse

Semantik Transf. Opt. Codegen. Linken

Quelle Tokenstrom ASTattrib.AST

Codegraph Ziel

Symbol-tabelle

Definitions-tabelle

Einleitung Wintersemester 2008/09 42 / 50

Page 43: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Datenstrukturen

Tokenstrom

(Attributierter) Syntaxbaum (AST)

Codegraph

Zielprogramm

Symboltabelle

Definitionstabelle

Einleitung Wintersemester 2008/09 43 / 50

Page 44: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Tokenstrom

Token:bedeutungstragende Einheit im Programm Paar aus syntaktischemSchlussel und Merkmal (Value)

Tokenstrom:Darstellung des Quellprogramms als Folge von Tokens

Schnittstelle: Lexer und Parser

Vorsicht: Tokenstrom begrifflich notwendig, aberImplementierung noch offen! (gilt auch fur die weiterenDatenstrukturen)

Einleitung Wintersemester 2008/09 44 / 50

Page 45: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Attributierter Syntaxbaum

Syntaxbaum:

Schachtelung der bedeutungstragenden Einheitenkann kompositional Semantik zugeordnet werden

Abstrakte Syntax:

Syntax stark vereinfacht und durch Struktur wiedergegebenz.B. fallen Schlusselworte wie while und Klammerungen weg

Attribute:

Ergebnisse von semantischer Analysez.B. Typen, Namen, (konstante) Werte, Definitionsstellen, usw.

Schnittstelle zwischen Syntaxanalyse, semantische Analyse,Transformationsphase

Einleitung Wintersemester 2008/09 45 / 50

Page 46: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Codegraph

Darstellung des Programms mit Datenobjekten undOperationen der Zielmaschine

Befehle fur Operationen noch nicht ausgewahlt (Art desRegisterzugriffs, Adressierungsmodi, usw. noch offen)

Keine Register- und Speichereinschrankungen

Schnittstelle:

Transformationsphase und CodegenerierungEingabe und Ergebnis vieler Optimierungen

Einleitung Wintersemester 2008/09 46 / 50

Page 47: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Zielprogramm

Ausgabe der Codeselektion: symbolisch codiert

Assemblierer: verschlusselt binar, lost symbolische Adressenauf, soweit intern bekannt

Binder: lost externe Symbole auf

Ergebnis: Objektprogramm ohne symbolische Adressen (abereventuell relativ adressiert)

Einleitung Wintersemester 2008/09 47 / 50

Page 48: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Java Byte Code (Assembler fur die JVM)

; Purpose: Print out ”Hello World!”

.class public examples/HelloWorld

.super java/lang/Object

.method public <init>()Vaload 0invokespecial java/lang/Object/<init>()return.end method.method public static main([Ljava/lang/String;)V.limit stack 2; push System.out onto the stackgetstatic java/lang/System/out Ljava/io/PrintStream;; push a string onto the stackldc ”Hello World!”; call the PrintStream.println() method.invokevirtual java/io/PrintStream/println(Ljava/lang/String;)Vreturn.end method

; 0x2a; 0xb7 0x00 0x16; 0xb1

; 0xb2 0x00 0x02

; 0x12 0x15

; 0x0d 0x00 0x0c; 0xb1

Einleitung Wintersemester 2008/09 48 / 50

Page 49: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Symboltabelle

Zuordnung Bezeichner, Literalkonstanten (evtl. andereSymbole) zur ubersetzerinternen Codierung

Aufbau wahrend Symbolentschlusselung, dann unverandert imUbersetzungslauf

Einleitung Wintersemester 2008/09 49 / 50

Page 50: Sprachtechnologie und Compiler - KIT · gut im Test (nur kleiner Teil des Codes ausgef uhrt) kann dynamisch ermittelte Laufzeiteigenschaften ber ucksichtigen (dynamische Optimierung)

Definitionstabelle

Datenbank des Ubersetzers

Tabelle aller Definitionen (Vereinbarungen):

Zuordnung von Symbolen zu BedeutungenWann bezeichnen die gleichen Symbole dieselben Objekte,Prozedurenspeichert analysierten semantischen Kontext von Symbolen

Einleitung Wintersemester 2008/09 50 / 50