Praktikum Softwareanalyse und -transformation
|
|
- Cathrin Waldfogel
- vor 5 Jahren
- Abrufe
Transkript
1 Praktikum Softwareanalyse und -transformation Thilo Mende Universität Bremen Fachbereich 3 Mathematik und Informatik Arbeitsgruppe Softwaretechnik Sommersemester 2009
2 Syntaktische Analyse und Generierung des ASTs 1 Einführung 2 Analyse I 3 Refactoring I 4 Analyse II 5 Refactoring II T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 3 / 23
3 Syntaktische Analyse und Generierung des ASTs 2 Analyse I Syntaktische Analyse und Überführung in AST ANTLR Ein Beispiel: Addition+Multiplikation Unsere Programmiersprache Namensbindung Unparse T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 4 / 23
4 Einordnung Programmtext Programmtext mit Makros Präprozessor Tokenstrom Lexer Parser abstrakter Syntaxbaum semantische Analyse annotierter abstrakter Syntaxbaum Front-End Middle- Zwischensprachengenerator Zwischendarstellung Analysen Transformationen annotierte Zwischendarstellung End Unparse Code Back-End Wissensbasis T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 5 / 23
5 Einordnung Programmtext Programmtext mit Makros Präprozessor Tokenstrom Lexer Parser abstrakter Syntaxbaum semantische Analyse annotierter abstrakter Syntaxbaum Front-End Middle- Zwischensprachengenerator Zwischendarstellung Analysen Transformationen annotierte Zwischendarstellung End Unparse Code Back-End Wissensbasis T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 5 / 23
6 ANTLR Im Allgemeinen: ANother Tool for Language Recognition aka Parser Generator Top-Down-Parser LL(*): L Von Links lesen L Das linkeste nicht-terminal wird zuerst ersetzt * Beliebiger Lookahead Unterstützt Java, C, Python... ANTLRWorks als Grammatik-IDE T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 6 / 23
7 ANTLR Im Allgemeinen: ANother Tool for Language Recognition aka Parser Generator Top-Down-Parser LL(*): L Von Links lesen L Das linkeste nicht-terminal wird zuerst ersetzt * Beliebiger Lookahead Unterstützt Java, C, Python... ANTLRWorks als Grammatik-IDE Und wie wir es nutzen: Lexer und Parser in einer Grammatik Java/Ant Beispiel-Projekt unter ~tmende/sat/satparser-v.0.1.tar.gz T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 6 / 23
8 Eingabe: Addition+Multiplikation Eingabe: (1+2) 5 T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 7 / 23
9 Eingabe: Addition+Multiplikation Eingabe: (1+2) 5 Aufgabe: Transformation in einen Abstrakten Syntaxbaum T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 7 / 23
10 Gerüst grammar SAT ; // Name g l e i c h Dateiname o p t i o n s { l a n g u a g e = Java ; // Ausgabesprache output = AST ; // Ausgabe : Tree ASTLabelType=CommonTree ; // K l a s s e d e r Knoten b a c k t r a c k = t r u e ; // A u t o m a t i s c h e s B a c k t r a c k i n g an // macht i f / e l s e s p ä t e r e i n f a c h e r } t o k e n s { // D e f i n i t i o n d e r Token, kann man auch i n l i n e machen PLUS = + ; TIMES = ; PAR L = ( ; PAR R = ) ; { package a g s t. s a t ; } // Wird i n d i e g e n e r i e r t e l e x e r : : h e a d e r { package a g s t. s a t ; } // K l a s s e n g e s c h r i e b e n T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 8 / 23
11 Lexer prog : ; // Dummy, e r s t m a l i g n o r i e r e n // Fragment : w i r d n i c h t a l s Token b e n u t z t fragment SPACE : \ t ; fragment DIGIT : ; // Token werden groß g e s c h r i e b e n NEWLINE : ( \ r? \n )+ { $ c h a n n e l = HIDDEN ; } ; // HIDDEN : P a r s e r s i e h t d i e n i c h t WHITESPACE : SPACE+ { $ c h a n n e l = HIDDEN ; } ; INTEGER : DIGIT+; // Zahlen : Ein oder mehr d i g i t s T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 9 / 23
12 Test des Lexers... Reader r e a d e r = new F i l e R e a d e r ( a r g s [ 0 ] ) ; SATLexer l e x e r = new SATLexer ( new ANTLRReaderStream ( r e a d e r ) ) ; r e a d e r. c l o s e ( ) ; CommonTokenStream tokenstream = new CommonTokenStream ( l e x e r ) ; f o r ( Object o b j : tokenstream. gettokens ( ) ) { CommonToken token = ( CommonToken ) o b j ; i f ( token. g e t C h a n n e l ( )!= CommonToken. HIDDEN CHANNEL){ System. out. p r i n t f ( %s :% s \n, token. gettext ( ), SATParser. tokennames [ token. gettype ( ) ] ) ; }... } T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 10 / 23
13 Test des Lexers (2) cd Project-Dir && ant T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 11 / 23
14 Test des Lexers (2) cd Project-Dir && ant java -cp build/sat.jar agst.sat.lexertest example.math T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 11 / 23
15 Test des Lexers (2) cd Project-Dir && ant java -cp build/sat.jar agst.sat.lexertest example.math 2 : INTEGER +:PLUS 3 : INTEGER : TIMES 4 : INTEGER ( : PAR L 1 : INTEGER +:PLUS 2 : INTEGER ) : PAR R : TIMES 5 : INTEGER (1+2) 5 T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 11 / 23
16 Parser // Ein Programm : n u l l oder mehr e x p r prog : ( e x p r ) ; e x p r : // M i t t e l s Mexpr w i r d d i e Operator R e i h e n f o l g e g e s t e u e r t mexpr ( PLUS mexpr ) ; // PR oder V e r k e t t u n g von mexpr : pr (TIMES pr ) ; pr : INTEGER PAR L e x p r PAR R ;... T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 12 / 23
17 Parse-Tree mit ANTLRWorks T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 13 / 23
18 Transformation in AST... // ˆ : n e u e r Knoten im AST e x p r : mexpr ( PLUSˆ mexpr ) ; mexpr : / Das h i e r i s t d e r k o m p l i z i e r t e Weg Operatoren mit Rewrite R u l e s zu b e s c h r e i b e n. D e u t l i c h k ü r z e r geht e s mit pr (TIMESˆ pr ) ; Dafür s i e h t man auch nochmal w i r man l a b e l s b e n u t z t um Tokens g l e i c h e n Typs u n t e r s c h i e d l i c h zu behandeln : i d e n t i f i e r =r e g e l und dann mit $ i d e n t i f i e r r e f e r e n z i e r e n. / ( pr > pr ) (TIMES r=pr > ˆ(TIMES $mexpr $r ) ) ; //! : N i c h t f ü r den AST bestimmt pr : INTEGER PAR L! e x p r PAR R! ; T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 14 / 23
19 AST mit ANTLRWorks T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 15 / 23
20 Test des Parsers... SATParser p a r s e r = new SATParser ( tokenstream ) ; SATParser. p r o g r e t u r n r = p a r s e r. prog ( ) ; CommonTree c t = ( CommonTree ) r. g e t T r e e ( ) ; System. out. p r i n t l n ( c t. t o S t r i n g T r e e ( ) ) ;... T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 16 / 23
21 Test des Parsers... SATParser p a r s e r = new SATParser ( tokenstream ) ; SATParser. p r o g r e t u r n r = p a r s e r. prog ( ) ; CommonTree c t = ( CommonTree ) r. g e t T r e e ( ) ; System. out. p r i n t l n ( c t. t o S t r i n g T r e e ( ) ) ;... ant java -cp build/sat.jar agst.sat.processor example.math T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 16 / 23
22 Test des Parsers... SATParser p a r s e r = new SATParser ( tokenstream ) ; SATParser. p r o g r e t u r n r = p a r s e r. prog ( ) ; CommonTree c t = ( CommonTree ) r. g e t T r e e ( ) ; System. out. p r i n t l n ( c t. t o S t r i n g T r e e ( ) ) ;... ant java -cp build/sat.jar agst.sat.processor example.math Ausgabe: (+ 2 (* 3 4)) (* (+ 1 2) 5) T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 16 / 23
23 Programmiersprache Allgemeine Anforderungen: so einfach wie möglich so ausdrucksstark wie nötig für die Refactorings Teilmenge von C++ Erleichtert Überprüfung von Transformationen T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 17 / 23
24 Programmiersprache Allgemeine Anforderungen: so einfach wie möglich so ausdrucksstark wie nötig für die Refactorings Teilmenge von C++ Erleichtert Überprüfung von Transformationen Konkrete Teilmenge: Klassen mit Methoden und Attributen einfachste Anweisungen, z.b. + einfache weitere Datentypen, z.b. int einfachste Kontrollstrukturen, z.b. if und while einfache Ausgabeanweisungen (für den Test) Parametermodi: Wert und Referenz kein Overloading, einfache Namensbindung T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 17 / 23
25 BNF-Syntax ::= t r e n n t l i n k e und r e c h t e R e g e l s e i t e. beendet Regel t r e n n t A l t e r n a t i v e n {X} b e s c h r e i b t b e l i e b i g v i e l e Wiederholung von X ( auch 0) [X] b e s c h r e i b t o p t i o n a l e s X t s t e h t f ü r Token t ( { i s t a l s o e i n Token d e r Sprache ) A l l e Symbole, d i e n i c h t a u f d e r l i n k e n S e i t e a u f t r e t e n, s i n d T e r minale <e p s i l o n > i s t d i e l e e r e r e c h t e S e i t e T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 18 / 23
26 Unsere Grammatik (1) P ::= { C D }. // Prog. b e s t e h t aus K l a s s e n+d e k l a r a t i o n e n C ::= c l a s s i d [ : i d ] { p u b l i c : {D} } ; // Klassen D e k l a r a t i o n // ( p u b l i c nur wg. K o m p a t i b i l t ä t ) D ::= T i d ; M. // D e k l a r a t i o n ( V a r i a b l e oder Methode ) T ::= v o i d i n t i d. // Typen : B u i l t i n und s e l b e r d e f i n i e r t e M ::= T i d ( PL ) B. // Methoden D e f i n i t i o n PL ::= <e p s i l o n > Pa {, Pa }. // Parameter L i s t e Pa ::= T [&] i d. // Parameter Argument B ::= { { D } { S } }. // Block N ::= i d i d. i d. // Name T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 19 / 23
27 Unsere Grammatik (2) E ::= E < Te // E x p r e s s i o n E = Te Te. Te ::= Te + Pr // Terminal E x p r e s s i o n (wg. Operator Präzedenz ) Te Pr Pr. Pr ::= N number ( E ) t h i s > i d N (AL). // P r i m i t i v e AL ::= <e p s i l o n > E {, E }. // Argument L i s t e S ::= N = E ; // Statement N ( AL ) ; r e t u r n E ; i f ( E ) S [ e l s e S ] B p r i n t f ( %d\n, E ) ; w h i l e ( E ) S. T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 20 / 23
28 Beispiel-Programm i n t g l o b a l ; c l a s s C { p u b l i c : i n t a ; i n t b ; v o i d f o o ( i n t& x ) { a = x ; x = (1 + 2 ) ; } } ;... c l a s s B : C { p u b l i c : i n t c ; C d ; i n t bar ( i n t x, i n t y ) { w h i l e ( x<y ) { x = x + 2 ; i f ( y > 5) { i n t x ; x = y + 5 ; f o o ( x ) ; r e t u r n x ; } } c = x ; r e t u r n 0 ; } } ; T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 21 / 23
29 Und so geht es weiter Zum nächsten Termin: Grammatik in ANTLR umsetzen T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 22 / 23
30 Und so geht es weiter Zum nächsten Termin: Grammatik in ANTLR umsetzen Beim nächsten Termin: Zwischenergebnis besprechen Die Woche danach: Semantische Analyse T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 22 / 23
31 Und so geht es weiter Zum nächsten Termin: Grammatik in ANTLR umsetzen Beim nächsten Termin: Zwischenergebnis besprechen Die Woche danach: Semantische Analyse Fragen? T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 22 / 23
32 T.Mende (Uni Bremen) Softwareanalyse und -transformation SS09 23 / 23
Vorlesung Software-Reengineering
Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2011/12 Überblick I Statische Programmanalyse
MehrQuelltextähnlichkeit
Quelltextähnlichkeit Tobias Jamin Universität Bremen Fachbereich 3 Mathematik und Informatik tjamin@tzi.de Abstrakt Programm-Transformationen ändern den Quelltext eines Programms. Bei den Transformationen
Mehr30. Parser-Generatoren
30. Parser-Generatoren Prof. Dr. rer. nat. Uwe Aßmann Institut für Software- und Multimediatechnik Lehrstuhl Softwaretechnologie Fakultät für Informatik TU Dresden http://st.inf.tu-dresden.de Version 11-0.1,
MehrErgänzungen zur Theoretischen Informatik. Compilerbau mit ANTLR. Literatur Das Standardwerk zum Compilerbau ist [1].
Themen Compilerbau mit ANTLR. Literatur Das Standardwerk zum Compilerbau ist [1]. [1] Aho, Alfred V. ; Lam, Monica S. ; Sethi, Ravi: Compiler. Prinzipien, Techniken und Tools. Pearson, 2008. ISBN 3827370973
MehrCompilerbau (1 KU) SS 2011
Compilerbau (1 KU) 716.077 SS 2011 Univ.-Prof. Dr. Franz Wotawa, Birgit Hofer Institut für Softwaretechnologie 1 Übungsmodus Aufgabenblätter Inhalt dieser LV-Einheit it Programmieraufgabe Vorstellung Programmieraufgabe
MehrGrundlagen der Programmierung 3 A
Grundlagen der Programmierung 3 A Compiler A: Phasen Lexikalische Analyse; Scanner Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2018 Compiler; Übersetzungsprogramme Ein Übersetzer (Compiler) ist ein
MehrPraktikum Compilerbau Sitzung 4 Abstrakter Syntaxbaum
Praktikum Compilerbau Sitzung 4 Abstrakter Syntaxbaum Prof. Dr.-Ing. Gregor Sneltg Andreas Zwkau IPD Sneltg, Lehrstuhl für Programmierparadigmen KIT Universität des Landes Baden-Württemberg und nationales
MehrProgrammierung 2. Übersetzer: Das Frontend. Sebastian Hack. Klaas Boesche. Sommersemester
1 Programmierung 2 Übersetzer: Das Frontend Sebastian Hack hack@cs.uni-saarland.de Klaas Boesche boesche@cs.uni-saarland.de Sommersemester 2012 Vom Programm zur Maschine Was passiert eigentlich mit unseren
MehrGrundlagen der Programmierung 3 A
Grundlagen der Programmierung 3 A Compiler A: Phasen; Scanner Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Compiler; Übersetzungsprogramme Ein Übersetzer (Compiler) ist ein Programm, das ein Wort
MehrGrammatiken und ANTLR
Grammatiken und ANTLR Zusatzfolien zu Algo Blatt 6 Author: Henry Schaefer http://www.majeeks.de/folien_blatt6.pdf Grammatik Definition: syntaktische Beschreibung einer Sprache (H.S.) Definiton Grammatik
MehrCompiler; Übersetzungsprogramme. Grundlagen der Programmierung 3 A. Compiler für Programmiersprachen. Phasen eines Compilers
ompiler; Übersetzungsprogramme Grundlagen der Programmierung 3 A ompiler A: Phasen; Scanner Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Ein Übersetzer (ompiler) ist ein Programm, das ein Wort
Mehr3 Syntax von Programmiersprachen
3 Syntax von Programmiersprachen Syntax ( Lehre vom Satzbau ) formale Beschreibung des Aufbaus der Worte und Sätze, die zu einer Sprache gehören; im Falle einer Programmiersprache Festlegung, wie Programme
Mehr1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -
1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik
Mehr1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -
1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik
Mehr3 Syntax von Programmiersprachen
3 Syntax von Programmiersprachen Syntax ( Lehre vom Satzbau ) formale Beschreibung des Aufbaus der Worte und Sätze, die zu einer Sprache gehören; im Falle einer Programmiersprache Festlegung, wie Programme
MehrVorlesung Software-Reengineering
Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2011/12 Überblick I Refactoring Code-Transformationen:
MehrGrundlagen der Programmierung 2 (Comp-A)
Grundlagen der Programmierung 2 (Comp-A) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 23. Mai 2007 Compiler; Übersetzungprogramme Ein Übersetzer (Compiler) ist ein Programm,
MehrSo schreiben Sie ein Parser-Programm
Universität des Saarlandes Fachrichtung Informatik Programming Systems Lab Prof. Gert Smolka Proseminar Programmiersysteme WS 03/04 Höhere Funktionale Programmierung: Parser-Kombinatoren Matthias Berg
MehrCompilerbau für die Common Language Run-Time
Compilerbau für die Common Language Run-Time Syntax und Semantik von Programmiersprachen 2 Compilerbau Sprachbeschreibung vs. Implementierung Beschreibung: formale oder informale (engl.) Lexik, Syntax,
MehrEinführung Compilergenerierung Bewertung Referenzen. SableCC. Benjamin Daeumlich
06.07.2006 Gliederung 1 2 3 4 . Autor und Name Features Autor Autor und Name Features Autor: Étienne Gagnon : Teil seiner Masterarbeit an der McGill-Universität Montreal vom März 1998 Name Autor und Name
MehrGrundlagen der Programmierung 2 (Comp-A)
Grundlagen der Programmierung 2 (Comp-A) Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 16. Juni 2011 Compiler; Übersetzungsprogramme Ein Übersetzer (Compiler) ist ein
MehrCompilerbau. Einführung in Bison
Compilerbau Einführung in Bison Überblick 1. Bison a) Eingabespezifikation 1. Prolog 2. Definitionsteil 3. Regelteil 4. Epilog b) Bison-Bezeichner und -Funktionen c) Konflikte und Mehrdeutigkeiten d) Debug-Funktionalität
MehrZuerst wird die Bedingung ausgewertet. Ist sie erfüllt, wird der Rumpf des while-statements ausgeführt. Nach Ausführung des Rumpfs wird das gesamte
Zuerst wird die Bedingung ausgewertet. Ist sie erfüllt, wird der Rumpf des while-statements ausgeführt. Nach Ausführung des Rumpfs wird das gesamte while-statement erneut ausgeführt. Ist die Bedingung
MehrParsing SystemVerilog 2012
Parsing Julian Nagel Lehrstuhl für Rechnerarchitektur Universität Heidelberg 06.07.2016 1 2 3 Inhaltsverzeichnis 4 5 6 Viele Ideen dazu wie effektiv Hardware entwickelt werden kann, aber keine IDE welche
MehrSoftware Entwicklung 1
Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Fallstudie: Arithmetische Ausdrücke Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 33 Überblick
MehrRainer Stropek cubido. Baumschule Expression Trees in C#, CLR und DLR
Rainer Stropek cubido Baumschule Expression Trees in C#, CLR und DLR Inhalt Als Anwendungsentwickler kommt man selten mit Expression Trees in Berührung. Sie sind ein Implementierungsdetail von LINQ. Ihre
MehrStratego/XT und ASF+SDF Meta-Environment. Paul Weder Seminar Transformationen Datum:
Stratego/XT und ASF+SDF Meta-Environment Paul Weder Seminar Transformationen Datum: 20.01.2006 Gliederung Allgemeines ASF+SDF Meta-Environment Stratego/XT Zusammenfassung/Vergleich SDF (Syntax Definition
MehrProgrammierkurs Java
Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE3-Syntaxdiagramme (Stand 05.11.2010) Aufgabe 1: Entwickeln Sie Regeln zur Übersetzung von EBNF in Syntaxdiagramme. Aufgabe 2: Eine Zahl ist entweder
MehrAktueller Stand Entwicklung eines Parser- und Instrumentierungssystems für den strukturorientierten Programmtest
Aktueller Stand Entwicklung eines Parser- und Instrumentierungssystems für den strukturorientierten Programmtest Ronny Treyße HU Berlin Aktueller Stand p.1/22 Gliederung Überblick über das Projekt Die
MehrSoftware Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter
Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter Fallstudie: Arithmetische Ausdrücke AG Softech FB Informatik TU Kaiserslautern Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 33 Überblick
Mehr9.4 Grundlagen des Compilerbaus
Kap09.fm Seite 717 Dienstag, 7. September 2010 2:06 14 9.4 Grundlagen des Compilerbaus 717 so dass die Benutzung dieser Regeln zum Aufbau eines + -Knotens bzw. eines Negations- Knotens im abstrakten Syntaxbaum
MehrÜbungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002
1. Stellen Sie die schrittweise Verbesserung eines Compilers durch das Bootstrap- Verfahren mit Hilfe von T-Diagrammen dar. Gegeben ist ein auf der Maschine M lauffähiger Compiler C 1, der in S geschrieben
MehrLexikalische Analyse, Tokenizer, Scanner
Lexikalische Analyse, Tokenizer, Scanner Frühe Phase des Übersetzers Aufgabenteilung: Scanner (lokale) Zeichen (Symbol-)Analyse Parser Syntax-Analyse Aufgabe des Scanners: Erkennung von: Zahlen, Bezeichner,
MehrDefinition von domänenspezifischen Sprachen mit Xtext: Einführung
Definition von domänenspezifischen Sprachen mit Xtext: Einführung 28. November 2012 Taentzer Modellgetriebene Softwareentwicklung 246 Überblick Was ist zu tun, wenn wir selbst einen Ansatz für modellgetriebenen
Mehr1 Attributierte Grammatiken. 2 Zyklische AG. 3 Codeerzeugung mit AGs. Zusatzfolien Semantische Analyse Wintersemester 2008/09 1 / 28
1 Attributierte Grammatiken 2 Zyklische AG 3 Codeerzeugung mit AGs Zusatzfolien Semantische Analyse Wintersemester 2008/09 1 / 28 Beispiel: Taschenrechner mit Attributierter Grammatik Produktion Semantische
MehrPraktikum Compilerbau Sitzung 4 Semantik und Typprüfung
Praktikum Compilerbau Sitzung 4 Semantik und Typprüfung Lehrstuhl für Programmierparadigmen Universität Karlsruhe (TH) 13. Mai 2009 (IPD Snelting) Sitzung 4 Semantik 13. Mai 2009 1 / 13 1 Letzte Woche
MehrVon der Grammatik zum AST
Von der Grammatik zum AST Welche Eigenschaften soll ein Parser haben? Wann ist eine Grammatik eindeutig? Wie sollte eine Grammatik aussehen? Theoretischer Hin tergrund: FIRST, FOLLOW Einschränkungen von
Mehr3.1 Reservierte Wörter
3.1 Reservierte Wörter int Bezeichner für Basis-Typen; if, else, while Schlüsselwörter aus Programm-Konstrukten; (,), ",, {,},,,; Sonderzeichen. 62 3.2 Was ist ein erlaubter Name? Schritt 1: Angabe der
MehrDie Klasse MiniJava ist in der Datei MiniJava.java definiert:
Die Klasse MiniJava ist in der Datei MiniJava.java definiert: import javax.swing.joptionpane; import javax.swing.jframe; public class MiniJava { public static int read () { JFrame f = new JFrame (); String
MehrGrundlagen der Informatik III Wintersemester 2010/ Vorlesung Dr.-Ing. Wolfgang Heenes
Grundlagen der Informatik III Wintersemester 2010/2011 20. Vorlesung Dr.-Ing. Wolfgang Heenes int main() { printf("hello, world!"); return 0; } msg: main:.data.asciiz "Hello, world!".text.globl main la
MehrÜbersetzerbau Cluj-Napoca, Rumänien 2007
Übersetzerbau Cluj-Napoca, Rumänien 2007 Markus Löberbauer Institut für Systemsoftware Johannes Kepler Universität, 4040 Linz, Österreich Loeberbauer@ssw.jku.at 2007-02-01 Zusammenfassung In dieser Übung
MehrEinleitung Typsystem Typisierung Zusammenfassung Literatur. Typisierung. Effiziente Programmierung. Thomas Schnieders
Typisierung Effiziente Programmierung Thomas Schnieders Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg 2018-04-26 Thomas Schnieders Typisierung 1
MehrDefinition Compiler. Bekannte Compiler
Compiler Inhalt: Definition Compiler / bekannte Compiler Klassifikationen von Compilern Analyse-Synthese-Modell der Kompilierung Analyse des Quellprogramms Synthesephase Die Phasen eines Compilers Symboltabellenverwaltung
MehrSoftwareparadigmen EXP-Compiler Dokumentation v1.1 ( )
Softwareparadigmen EXP-Compiler Dokumentation v1.1 (8.5.2016) Stephan Frühwirt Inhaltsverzeichnis 1 Aufbau, Tools und Ausführung 2 1.1 Ausführung....................................... 2 2 Sprachdefinition
MehrSyntax von Programmiersprachen
Syntax von Programmiersprachen SEP 209 Programmiersprachen Sprache = Menge von Wörtern, typischerweise unendlich Programmiersprache: Wörter repräsentieren Programme Programm kann auf einem Computer evtl.
MehrInhalt Kapitel 11: Formale Syntax und Semantik
Inhalt Kapitel 11: Formale Syntax und Semantik 1 Abstrakte und konkrete Syntax 2 Lexikalische Analyse 3 Formale Sprachen, Grammatiken, BNF 4 Syntaxanalyse konkret 266 Abstrakte und konkrete Syntax Abstrakte
MehrVorlesung Programmieren
Vorlesung Programmieren 14 Parsen, Suchen und Sortieren 19./26.01.2015 Prof. Dr. Ralf H. Reussner Version 1.0 LEHRSTUHL FÜR SOFTWARE-DESIGN UND QUALITÄT (SDQ) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION
MehrProgrammieren in Java
Programmieren in Java Vorlesung 10: Ein Interpreter für While Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2015 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1
MehrQuelltextähnlichkeit
Quelltextähnlichkeit String autor = Tobias Jamin ; String projekt = Arte-Fakt ; String seminar = Transformationen ; Date termin = new Date(3, // Tag 2, // Monat 2006); Presentation praesentation = new
MehrCompilerbau für die Common Language Run-Time
Compilerbau für die Common Language Run-Time Syntaxanalyse 2 Grammatikgetriebener Compilerbau Grammatik Teil der Sprachdefinition Grammatik liefert Liste der Tokenklassen Grammatik hilft bei Strukturierung
MehrInhalt. " DiaGen Historie und Beschreibung. " Architektur eines DiaGen-Editors. " Hypergraphen. " DiaGen-Editoren Komponenten
DIAGEN Sven Goeckels Seminar : Visuelle Sprachen Universität Bremen FB Informatik WS 2001/2002 Inhalt " DiaGen Historie und Beschreibung " " Hypergraphen " DiaGen-Editoren Komponenten? Modeler? Reducer?
MehrMethoden zur Interpretation LISPähnlicher. Programmiersprachen. Seminarvortrag / 53 FH AACHEN FACHBEREICH 9 TOBIAS STUMM MATR.-NR.
Methoden zur Interpretation LISPähnlicher Programmiersprachen Seminarvortrag 20.01.2017 FACHBEREICH 9 TOBIAS STUMM MATR.-NR. 4012917 1 Inhalt Motivation Lisp > Definition > Scheme Interpreter > Definition
MehrEinführung in die Programmiertechnik
Einführung in die Programmiertechnik Formale Beschreibung von Programmiersprachen Lexikalische Regeln Definition von Wörtern (Lexem, Token) Gruppierung von Zeichen Lexikalische Kategorien: Klassen ähnlicher
MehrSyntaxanalyse Ausgangspunkt und Ziel
Syntaxanalyse Ausgangspunkt und Ziel Ausgangspunkt: Kontextfreie Grammatik Im Normalfall BNF, manchmal EBNF BNF = Backus-Naur-Form = Produktionsregeln EBNF = erweiterte BNF (+ reguläre Ausdrücke) Prüfung
MehrGuile Die Erweiterungssprache des GNU-Projekts
Guile Die Erweiterungssprache des GNU-Projekts Matthias Köppe Otto-von-Guericke-Universität Magdeburg Magdeburger Linux User Group e. V. 19. Mai 2001 Überblick Guile als Erweiterungssprache Guile als Scheme-Implementierung
MehrPraktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom : Monaden als Berechnungsmuster
16:02:16 2017-01-17 1 [30] Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom 10.01.2017: Monaden als Berechnungsmuster Christoph Lüth Universität Bremen Wintersemester 2016/17 Frohes
MehrDas erste C++ Programm
Das erste C++ Programm // Program: power8.c // Raise a number to the eighth power. #include int main() { // input std::cout > a; // computation int
Mehrn 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -
n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik n "Informatik" = Kunstwort aus Information
MehrDefinition von LR(k)-Grammatiken
Definition von LR(k)-Grammatiken Ziel: Ein Lookahead von k soll ausreichen um entscheiden zu können, welche Regel angewendet werden muss. Definition: FIRST k (w 1 w n ):= w 1 w k, falls n k, w 1 w n, sonst.
MehrZwischencode-Erzeugung. 2. Juni 2009
Zwischencode-Erzeugung im Rahmen des Seminars "Übersetzung von künstlichen Sprachen" Sebastian Hanneken 2. Juni 2009 1 / 32 1 Einleitung Einordnung Funktion von Zwischencode 3-Adresscode (3AC) 2 Erzeugung
MehrLösungsvorschläge zum Übungsblatt 11: Übersetzung von Programmiersprachen (WS 05/06)
Prof. Dr. A. Poetzsch-Heffter Dipl.-Inform. M. Gawkowski Technische Universität Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungsvorschläge zum Übungsblatt 11: Übersetzung von Programmiersprachen
MehrInformatik für Schüler, Foliensatz 2 Ausdrücke, Variablen, Datentypen, Ein- und Ausgabe
Prof. G. Kemnitz Institut für Informatik, Technische Universität Clausthal 26. August 2009 1/17 Informatik für Schüler, Foliensatz 2 Ausdrücke, Variablen, Datentypen, Ein- und Ausgabe Prof. G. Kemnitz
MehrFACHHOCHSCHULE MANNHEIM
für Java-Programmierer Der Präprozessor Prof. Dr. Wolfgang Schramm FACHHOCHSCHULE MANNHEIM Hochschule für Technik und Gestaltung Präprozessor Ist dem Compiler vorgeschaltet ( Prä -). Spezielle Anweisungen
MehrVorlesung Programmieren
Vorlesung Programmieren 3. Kontrollstrukturen 04.11.2015 Prof. Dr. Ralf H. Reussner Version 1.1 LEHRSTUHL FÜR SOFTWARE-DESIGN UND QUALITÄT (SDQ) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION (IPD),
MehrInterpreter - Gliederung
Institut für Informatik Ludwig-Maximilian Universität Interpreter - Gliederung Programmiersprache Syntax Konkrete Syntax Abstrakter Syntax Baum (Abstrakte Syntax) Parser Syntaktische Struktur einer Sprache
MehrDer Parsergenerator BTRACC2
Der Parsergenerator BTRACC2 Uwe Erdmenger pro et con Innovative Informatikanwendungen GmbH 11. Workshop Software-Reengineering 04.-06. 06. Mai 2009, Bad Honnef Eigenschaften von Legacy-Quellcode Sprachen
MehrKontextfreie Grammatiken. Kontextfreie Grammatiken 1 / 48
Kontextfreie Grammatiken Kontextfreie Grammatiken 1 / 48 Was kann man mit kontextfreien Grammatiken anfangen? Kontextfreie Grammatiken, kurz: werden zur Modellierung von KFGs rekursiv definierten baumartigen
MehrAdressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine WWW
Adressen Adressen, Termine Studienleistung Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Büro und Email Raum 216, Robert-Mayer-Str. 11-15 sabel@ki.informatik.uni-frankfurt.de
MehrAllgemeine Hinweise:
TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen SS 2011 Einführung in die Informatik I Midtermklausur Prof. Dr. Helmut Seidl, A. Lehmann, A. Herz,
MehrPraktikum Funktionale Programmierung Organisation und Überblick
Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Sommersemester 2013 Stand der Folien: SoSe 2013 Adressen Organisatorisches Software Projekt Adressen, Termine Studienleistung
Mehr2.2 Syntax, Semantik und Simulation
2.2 Syntax, Semantik und Simulation Ein Java Programm ist eine Folge von Buchstaben. Nicht jede Folge von Buchstaben ist ein korrektes Java Programm! Wie kann man alle korrekten Java Programme beschreiben?
MehrEs gibt keinen Algorithmus zum Schreiben eines Programms bzw. Algorithmus.
1 Einführung Programmiersprachen: Ermöglichen formale Beschreibung von Problemlösungsverfahren, die auf einem Computer oder Computersystemen ausführbar sind. Bilden die Basis zur Entwicklung von Software
MehrKontextfreie Grammatiken. Kontextfreie Grammatiken 1 / 45
Kontextfreie Grammatiken Kontextfreie Grammatiken 1 / 45 Was kann man mit kontextfreien Grammatiken anfangen? Kontextfreie Grammatiken, kurz: werden zur Modellierung von KFGs beliebig tief geschachtelten
MehrPraktikum Funktionale Programmierung Teil 1: Lexen und Parsen
Praktikum Funktionale Programmierung Teil 1: Lexen und Parsen Professur für Künstliche Intelligenz und Softwaretechnologie Sommersemester 2009 Überblick Teil 1: Lexen und Parsen Die Sprache LFP +C Professur
Mehr1 Grammar Engineering. 2 Abstrakte Syntax als abstrakte Algebra. 3 LL(1)-Parser. 4 LR Parser. 5 Fehlerbehandlung. 6 Earley Parser
1 Grammar Engineering 2 Abstrakte Syntax als abstrakte Algebra 3 LL(1)-Parser 4 LR Parser 5 Fehlerbehandlung 6 Earley Parser Zusatzfolien Syntaktische Analyse Wintersemester 2008/09 1 / 44 Grammar Engineering
Mehr5. Syntaxanalyse und der Parser-Generator yacc. 5.5 Aufsteigende Analyse. Absteigende Analyse versus aufsteigende Analyse. 5.5 Aufsteigende Analyse
5. Syntaxanalyse und der Parser-Generator yacc 5.1 Einleitung 5.2 Kontextfreie Grammatiken 5.3 Grundlagen von yacc 5.4 Absteigende Analyse Übersetzergenerierung Syntaxanalyse und yacc (2) Jan Bredereke,
MehrANTLR und Eclipse-Xtext zwei ll Kumpane
ANTLR und Eclipse-Xtext zwei ll Kumpane Roman Weissgärber email: r.w @ c.a r: roman w: weissgaerber c: chello a: at Abstract: Die Eclipse IDE erfreut sich nicht nur unter Java Entwicklern einer wachsenden
MehrCompilerbau Syntaxanalyse 68. LR(1)-Syntaxanalyse
Compilerbau Syntaxanalyse 68 LR(1)-Syntaxanalyse Bei der LL(1)-Syntaxanalyse wird allein aufgrund des nächsten Tokens die zu verwendende Produktion ermittelt. Bei der LR(1)-Syntaxanalyse braucht diese
MehrEinführung in die Programmierung für NF. Rückgabewerte, EBNF, Fallunterscheidung, Schleifen
Einführung in die Programmierung für NF Rückgabewerte, EBNF, Fallunterscheidung, Schleifen FUNKTIONEN UND PROZEDUREN 3 Rückgabewerte, EBNF, Fallunterscheidung, Schleifen 2 Funk@on und Prozedur Methoden
MehrVorlesung Software-Reengineering
Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2008/09 Überblick I 1 1 Compiler versus Reengineering-Werkzeug
MehrSoftware-Notationen. K. Bürtlmair. Masterstudiengang ITS //2010/11 Fachhochschule Salzburg. 3. Oktober 2013
Software-Notationen K. Bürtlmair Masterstudiengang ITS //2010/11 Fachhochschule Salzburg 3. Oktober 2013 K. Bürtlmair, Masterstudiengang ITS //2010/11 Fachhochschule Salzburg Software-Notationen 1/27 Textuelle
MehrZwischencodeerzeugung Compiler II
Zwishenodeerzeugung Compiler II Prof. Dr. Ursula Goltz 14.09.2012 Einleitung Front-End... Parser Sem. Analys Zwishenodegenerator Bak-End Codegenerator... Zwishendarstellung (Zwishenode) evtl. mashinennunabh.
MehrEinführung in die Informatik. Programming Languages
Einführung in die Informatik Programming Languages Beschreibung von Programmiersprachen Wolfram Burgard Cyrill Stachniss 1/15 Motivation und Einleitung Wir haben in den vorangehenden Kapiteln meistens
MehrVorlesung Programmieren
Vorlesung Programmieren 3. Kontrollstrukturen 09.11.2016 Jun.-Prof. Dr.-Ing. Anne Koziolek Version 1.1 ARBEITSGRUPPE ARCHITECTURE-DRIVEN REQUIREMENTS ENGINEERING (ARE) INSTITUT FÜR PROGRAMMSTRUKTUREN UND
MehrAllgemeine Hinweise:
TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 11/12 Einführung in die Informatik I Probe-Klausur Prof. Dr. Helmut Seidl, M. Schwarz, A. Herz,
Mehr3.2 Datentypen und Methoden
Kap03.fm Seite 217 Dienstag, 7. September 2010 1:48 13 3.2 Datentypen und Methoden 217 3.2 Datentypen und Methoden Wie bei vielen höheren Programmiersprachen gibt es auch in Java einfache und strukturierte
MehrFunktionale Programmierung ALP I. µ-rekursive Funktionen WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda
ALP I µ-rekursive Funktionen WS 2012/2013 Primitiv-rekursive Funktionen Jede primitiv-rekursive Funktion ist Loop-berechenbar. Das bedeutet, dass jede PR-Funktion in der Loop-Programmiersprache formuliert
MehrII.1.1. Erste Schritte - 1 -
1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.1.1. Erste Schritte - 1 - 1.
MehrII.1.1. Erste Schritte - 1 -
1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.1.1. Erste Schritte - 1 - 1.
MehrProgrammierpraktikum
TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Praktikum: Grundlagen der Programmierung Programmierpraktikum Woche 02 (03.11.2017) Leo Glavinić (leo.glavinic@tum.de) Cyprian Manthey (cyprian.manthey@tum.de)
MehrHüllklassen. Gerd Bohlender. 25. Juni Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java
Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 25. Juni 2007 G. Bohlender (IANM UNI Karlsruhe) Hüllklassen 25. Juni 2007 1 / 5 Grunddatentypen
MehrLR-Parser, Shift-Reduce-Verfahren
LR-Parser, Shift-Reduce-Verfahren Bottom-Up-Syntaxanalyse LR-Parser L: Eingabe von links nach rechts; R: Rechtsherleitung Shift-Reduce-Verfahren Beachte: Kein Backtracking nicht auf jede Grammatik anwendbar
MehrSyntax von Softwaresprachen
http://en.wikipedia.org/wiki/file:brueghel-tower-of-babel.jpg Syntax von Softwaresprachen OOPM, Ralf Lämmel Software Languages Team University of Koblenz-Landau 2 Quiz zur Motivation Sind dies gültige
MehrInstitut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 2. Februar 2017 Hinweise: Klausurtermine: Programmieren I Übungsklausur Programmieren I: 13. März
MehrWo sind wir? Übersicht lexikale Struktur von Java
Wo sind wir? Java-Umgebung Lexikale Konventionen Datentypen Kontrollstrukturen Ausdrücke Klassen, Pakete, Schnittstellen JVM Exceptions Java Klassenbibliotheken Ein-/Ausgabe Collections Threads Applets,
Mehr