40 likes | 134 Views
Ziele Heute. Compilerbau Nachlese Ausnutzung von Laufzeittypinformation. Compilerbau Nachlese. reguläre Ausdrücke: einfach aber ungenau Compilerbau: genaue Analyse der Struktur von Texten Analyse von "statischer" Semantik per Symboltabelle (Cross Reference Table)
E N D
Ziele Heute • Compilerbau Nachlese • Ausnutzung von Laufzeittypinformation
Compilerbau Nachlese • reguläre Ausdrücke: einfach aber ungenau • Compilerbau: • genaue Analyse der Struktur von Texten • Analyse von "statischer" Semantik per Symboltabelle(Cross Reference Table) • Datenflussanalyse: "read-from" Beziehung • Kontrollflulssanalyse: Ausführungsreihenfolgen • Slicing: wer hat hier zum Wert der Variablen X beigetragen? • Übung zu Hause: • Jeder: selber die Parserübungen programmieren • Importe mit Berücksichtigen • if / while / for mit analysieren: wird in jedem Fall ein return ausgeführt?
Compiler Compiler • Compiler / Parser können von Compiler Compilern generiert werdenz.B.: lex/yacc (veraltet), Eli, javacc (Standard für Java) • Back-End in die Grammatik einbauen: • Standard Back-End zur Erzeugung eines abstrakten Syntaxbaumsz.B.: JTB (Java Tree Builder) • Siehe Fujaba JavaParser Plugin
Ausnutzung von Laufzeittypinformation • schreibt Methode ClassFinder.addDotClassToSymbolTable() benutz java.lang.reflect • Class.forName (String) • Class. getDeclaredMethods () • Method.getName () • . . . • Class.getDeclaredFields () • Field.getName() • . . . • Class.getInterfaces () • Class.getSuperClass () • testet im Dobs ClassFinder.addDotClassToSymbolTable ("java.lang.System"), ...