![Page 1: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/1.jpg)
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
![Page 2: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/2.jpg)
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 14:00 - 17:00 Raum 1340
Beginn: Freitag, den 17.10.2007
Prüfung:
• Projektarbeit / Hausaufgaben
• jeder einzeln
• wird nur einmal im Jahr angeboten
Folienskript, Unterlagen, Aufgabenstellungen:
• http://www.se.eecs.uni-kassel.de/se
• meist einen Tag in voraus.
![Page 3: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/3.jpg)
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
…
![Page 4: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/4.jpg)
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
![Page 5: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/5.jpg)
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Scanning
![Page 6: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/6.jpg)
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Scanning
![Page 7: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/7.jpg)
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Code Generation
Registermaschinen
Maschinencode / Assembler
Stackmaschinen
BCEL
![Page 8: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/8.jpg)
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
![Page 9: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/9.jpg)
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
OPCodeDecoder
AdderAddierbefehl
1
1
0
0
&
=0
&
![Page 10: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/10.jpg)
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
![Page 11: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/11.jpg)
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
![Page 12: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/12.jpg)
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
![Page 13: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/13.jpg)
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
![Page 14: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/14.jpg)
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
BCELifier
Beispiel in Java schreiben
Compilieren
mit BCELifier "Creator" Klasse generien
anschauen
![Page 15: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/15.jpg)
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
if
![Page 16: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/16.jpg)
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
![Page 17: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/17.jpg)
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
while
![Page 18: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/18.jpg)
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
funcDecl
pi() {
3.1415927
}
pi()
![Page 19: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/19.jpg)
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Scopes
![Page 20: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/20.jpg)
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Procedure Call Stack
![Page 21: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/21.jpg)
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
![Page 22: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/22.jpg)
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 ')'
![Page 23: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/23.jpg)
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
![Page 24: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/24.jpg)
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
![Page 25: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/25.jpg)
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Ablauf:
Stack Eingabe Ausgabe
$ n + n * n $
![Page 26: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/26.jpg)
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Ablauf:
Stack Eingabe Ausgabe
![Page 27: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/27.jpg)
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) …
![Page 28: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/28.jpg)
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) = { }
![Page 29: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/29.jpg)
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)
![Page 30: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/30.jpg)
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) = { }
![Page 31: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/31.jpg)
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 ::=
![Page 32: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/32.jpg)
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
![Page 33: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/33.jpg)
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Compiler Compiler: Antlr V3
![Page 34: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/34.jpg)
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
Model Driven XXX
![Page 35: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/35.jpg)
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University
![Page 36: Fachgebiet Software Engineering Übersicht © 22.01.2014 Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester](https://reader036.vdokument.com/reader036/viewer/2022062318/55204d6749795902118bca2b/html5/thumbnails/36.jpg)
Fachgebiet Software Engineering Übersicht © 11.04.23 Albert Zündorf, Kassel University