View
110
Download
1
Category
Preview:
Citation preview
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Compilerbau und Reverse Engineering
Vorlesung im Wintersemester 2008/09
Prof. Albert Zündorf
Betreuer: Johannes Spohr, et. al.
Fachgebiet für Software Engineering
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Organisatorisches
Umfang: 4 SWS teils Vorlesungen teils Übungen
Übungsbetreuung: Johannes Spohr
Ort und Zeit: Freitag 10:15 - 11:45 Raum 1340
Beginn: Freitag, den 16.10.2009
Prüfung:
• Projektarbeit / Hausaufgaben
• jeder einzeln
• wird nur einmal im Jahr angeboten
Folienskript, Unterlagen, Aufgabenstellungen:
• http://seblog.cs.uni-kassel.de/
• meist einen Tag in voraus.
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Inhalte und Lernziele:
Lesen und Verarbeiten strukturierter Texte
Daten
Programme
Rekursiverabstiegscompiler
Compilercompiler
Codegenerierung
Codecompletion
Codeanalyse
Refactorings
…
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Literatur
http://compilers.iecc.com/crenshaw/
Compilerbau, 2 Tle., Tl.1 von Alfred V. Aho, Ravi Sethi, und Jeffrey D. Ullman von Oldenbourg (Taschenbuch - Dezember 1999)Preis:EUR 34,80
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Scanning
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Scanning
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Code Generation
Registermaschinen
Maschinencode / Assembler
Stackmaschinen
BCEL
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Registermaschinen
ALUOPCodeDecoder
Adder Multiplier
LogicOps StoreOps
JumpOps
PC
ACU
FP
R1 ..8
Memory
01001110010001010100010000101
AddressDecoder
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
OPCodeDecoder
AdderAddierbefehl
1
1
0
0
&
=0
&
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Maschinencode Registermaschine
Arithmetisch, Logisch, Speicher, Sprung, …
OpCode plus 1 oder 2 Operanden
Rechenbefehle nur auf Registern
Speicherbefehle: Memory Register
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Stackmaschinen
ALUOPCodeDecoder
Adder Multiplier
LogicOps StoreOps
JumpOps
PC
ACU
FP
R1 ..8
Memory
01001110010001010100010000101
AddressDecoder
Stack
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Maschinencode Stackmaschine
Arithmetisch, Logisch, Speicher, Sprung, …
OpCode plus 1 oder 2 Operanden
Rechenbefehle auf Stack
Speicherbefehle: Memory Stack
load 0, load 8, add, store 12
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Java Byte Code für eine Klassehttp://jakarta.apache.org/bcel/manual.html
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
BCELifier
Beispiel in Java schreiben
Compilieren
mit BCELifier "Creator" Klasse generien
anschauen
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
if
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
while
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
funcDecl
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Scopes
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Procedure Call Stack
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Tabellengesteuertes Parsen
Beispielgrammatik:
E ::= T ['+' T]* E ::= T E' E' ::= + T E' |
T ::= F ['*' F]* T ::= F T' T' ::= * F T' |
F ::= n | '(' E ')' F ::= n | '(' E ')'
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Parsertabelle
+ * ( ) n $
E E::=TE' E::=TE'
E' E'::=+TE' E'::= E'::=
T T::=FT' T::=FT'
T' T'::= T'::=*FT' T'::= T'::=
F F::=(E) F::=n
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Algorithmus
while Stack nicht leer
if top == currentToken
pop nextToken()
else
rule := M[top, currentToken]poppush (lhs(rule))print rule
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Ablauf:
Stack Eingabe Ausgabe
$ n + n * n $
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Ablauf:
Stack Eingabe Ausgabe
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Konstruktion: First und Follow
First () Menge aller Terminale mit denen beginnen kann
First (a) {a}
X ::= First ( X ) +=
X ::= A B C D First ( X ) += First ( A ) if ( First (A) ) First ( X ) += First (B) …
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Konstruktion: First und Follow
E ::= T E' First (E) = { }
E' ::= + T E' | First (E') = { }
T ::= F T' First (T) = { }
T' ::= * F T' | First (T') = { }
F ::= n | '(' E ')' First (F) = { }
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Konstruktion: First und Follow
Follow (X) alle Terminale die auf X folgen können
S Follow (S) += $
A ::= B Follow (B) += First () - if ( First () ) Follow (B) += Follow (A)
A ::= B Follow (B) += Follow (A)
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Konstruktion: First und Follow
E ::= T E' Follow (E) = { }
E' ::= + T E' | Follow (E') = { }
T ::= F T' Follow (T) = { }
T' ::= * F T' | Follow (T') = { }
F ::= n | '(' E ')' Follow (F) = { }
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Tabellenkonstruktion
for_all A ::=
for_all a First ()
M[A,a] += A ::=
if First ()
for_all b Follow (A)
M[A,b] += A ::=
if $ Follow (A)
M[A,$] += A ::=
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Tabellenkonstruktion
E ::= T E'
E' ::= + T E' |
T ::= F T'
T' ::= * F T' |
F ::= n | '(' E ')'
+ * ( ) n $
E
E'
T
T'
F
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Compiler Compiler: Antlr V3
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Model Driven XXX
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Recommended