Hallo Welt für Fortgeschrittene

Größe: px
Ab Seite anzeigen:

Download "Hallo Welt für Fortgeschrittene"

Transkript

1 Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Informatik 2 Programmiersysteme Martensstraße Erlangen

2 Inhalt Einführung Theoretische Grundlagen Grammatiken im Allgemeinen Die Chomsky-Hierarchie Die Chomsky-Normalform für kontextfreie Grammatiken Vorgehensweisen beim Parsen Bottom-Up-Parsing CYK (Cocke-Younger-Kasami) -Algorithmus Top-Down-Parsing Allgemeines Prinzip Rekursiver Abstiegsparser Ein- und Ausgabe in Java, C und C++ Reguläre Ausdrücke Zusammenfassung Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 2/81

3 Einführung Definition des Begriffs Parser : Ein Parser ist ein Computerprogramm, das in der Computertechnik für die Zerlegung und Umwandlung einer beliebigen Eingabe in ein für die Weiterverarbeitung brauchbares Format zuständig ist. Beispiele für Parser HTML-Parser im Browser Crawler von Suchmaschinen Syntaxanalyse im Compiler von Programmiersprachen Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 3/81

4 Einführung - Compiler Grobe Funktionsweise eines Compilers: 1.: Analysephase Lexikalische Analyse (Zerteilung des Textes in Token) Syntaktische Analyse Überprüfung, ob Quellcode der Syntax der Sprache entspricht Umwandlung in Syntaxbaum und Analyse mittels Parsers Fehler, falls Code nicht den Regeln der Sprache genügt Semantische Analyse (Überprüfung weiterer Bedingungen) 2.: Synthesephase Zwischencodeerzeugung Programmoptimierung Codegenerierung Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 4/81

5 Einführung - Syntaxbaum Beispiel für einen Syntaxbaum Auch Darstellung natürlicher Sprache (teilweise) möglich Satz Subjekt Prädikat Artikel Substantiv Verb Der Student schläft Erforschung der Struktur von Sprachen u.a. durch Noam Chomsky Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 5/81

6 Inhalt Einführung Theoretische Grundlagen Grammatiken im Allgemeinen Die Chomsky-Hierarchie Die Chomsky-Normalform für kontextfreie Grammatiken Vorgehensweisen beim Parsen Bottom-Up-Parsing CYK (Cocke-Younger-Kasami) -Algorithmus Top-Down-Parsing Allgemeines Prinzip Rekursiver Abstiegsparser Ein- und Ausgabe in Java, C und C++ Reguläre Ausdrücke Zusammenfassung Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 6/81

7 Theoretische Grundlagen Grammatiken Eine formale Grammatik G = (V, Σ, P, S) besteht aus V: endliche, nichtleere Menge von Variablen Σ: endliche, nichtleere Menge von Terminalen S: V, das Startsymbol P: endliche Menge von Produktionen der Form ((V Σ) + \ Σ*) x (V Σ)* oder einfacher: Menge von Ableitungsregeln P Q, wobei P aus mindestens einer Variable und optional Terminalen Q aus beliebig vielen Variablen und Terminalen besteht. Allgemeinster Typ: Chomsky-0-Grammatik Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 7/81

8 Theoretische Grundlagen - Chomsky-Hierarchie Hierarchische Klassifikation von Grammatiken, erstmals 1956 durch Noam Chomsky beschrieben Unterschied der Hierarchiestufen: zunehmend stärkere Einschränkungen für die Form zulässiger Produktionen Grammatik G = (V, Σ, P, S) Chomsky-0: keine weiteren Einschränkungen, s.o. Chomsky-1 oder kontextsensitiv: Vom Typ Chomsky-0 und zusätzlich (u v) P: u v Erweiterung: Regel S ε erlaubt, wenn S nie auf rechter Seite einer Produktion vorkommt Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 8/81

9 Theoretische Grundlagen - Chomsky-Hierarchie Fortsetzung: Chomsky-2 oder kontextfrei: Vom Typ Chomsky-1 und Auf der linken Seite darf nur eine Variable stehen Chomsky-3 oder regulär: Vom Typ Chomsky-2 und Alle Produktionen haben die Form A ab (rechtsregulär) oder A Ba (linksregulär) A a A ε für A, B V, a Σ Für uns interessant: kontextfreie Grammatiken Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 9/81

10 Theoretische Grundlagen - Beispiel Beispiel für eine kontextfreie Grammatik: G = (V, Σ, P, S) mit V = {A, T, F} Σ = {1, 2, 3, 4} P: A T A + T T F T * F F (A) S = A Diese Grammatik erzeugt mathematische Ausdrücke mit den Zahlen 1 bis 4, die nach Punkt-vor-Strich -Regel ausgewertet werden können, zusätzlich Klammerung möglich Tafel Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 10/81

11 Theoretische Grundlagen - Chomsky-Normalform Für die Anwendung bestimmter Algorithmen (u.a. CYK), muss die Grammatik in einer Normalform vorliegen. Für CYK: Chomsky-Normalform Definition: Eine kontextfreie Grammatik ist in Chomsky- Normalform (CNF), wenn jede Regel von der Form A BC oder A a das leere Wort S ε ist, mit A V, B,C V \ {S} und a Σ. Zu jeder kontextfreien Grammatik kann eine Grammatik in CNF konstruiert werden. Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 11/81

12 Theoretische Grundlagen - Chomsky-Normalform Algorithmus zur Umformung einer kontextfreien Grammatik in CNF: Eliminieren von ε-produktionen Für jedes Terminalsymbol a: Einführung einer neuen Variable A a und einer neuen Regel A a a; ersetze alle Vorkommen von a durch A a Eliminieren von Kettenregeln Auflösen von Regeln mit mehr als 2 Variablen auf der rechten Seite Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 12/81

13 Theoretische Grundlagen - Chomsky-Normalform Eliminierung von ε-produktionen: Entferne alle Regeln der Form A ε Für jede Regel, die ein solches A enthält, füge eine weitere Regel hinzu, in der das A gestrichen wurde Ausnahme: Falls Regel S ε existiert Führe neues Startsymbol S' ein Neue Regeln: S' ε und S' S Beispiel: S A, A BC, B b ε, C c wird umgeformt zu: S A, A BC C, B b, C c Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 13/81

14 Theoretische Grundlagen - Chomsky-Normalform Für jedes Terminalsymbol a: Einführung einer neuen Variable A a und einer neuen Regel A a a; ersetze alle Vorkommen von a durch A a Somit Entfernung eventuell vorhandener gemischter Produktionen wie A Ab Diese wird zu A AA b, zusätzliche neue Regel A b b Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 14/81

15 Theoretische Grundlagen - Chomsky-Normalform Eliminieren von Kettenregeln: Entfernung von Regeln der Art A B (A, B V). Dazu Suche nach Zyklen in einem Graphen, konstruiert aus den Kettenregeln Ersetze in jedem Zyklus die zugehörigen Variablen durch genau eine davon, und ersetze alle Vorkommen der ersetzten Variable durch die ausgewählte (S muss ggf. erhalten bleiben) Ersetze jetzt noch übrige Kettenregeln A B durch die Regeln A alle rechten Seiten von B Beispiel: A BC E A BC A E XZ F A XZ A A BC XZ ae F A Z A A Z Z ae Z ae Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 15/81

16 Theoretische Grundlagen - Chomsky-Normalform Auflösen von Regeln mit mehr als 2 Nichtterminalen auf rechter Seite Vorgehensweise: Ersetze so lange zwei benachbarte Symbole AB auf der rechten Seite durch eine neue Variable X, und füge die Regel X AB hinzu, bis keine Regeln mit mehr als zwei Nichtterminalen existieren. Beispiel: A ABKCD A XKCD, X AB A YCD, X AB, Y XK A ZD, X AB, Y XK, Z YC Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 16/81

17 Theoretische Grundlagen - Chomsky-Normalform Nun noch Entfernung von unerreichbaren und unproduktiven Variablen Reduzieren der CNF Unerreichbar: Alle Variablen, die vom Startsymbol aus nie erreicht werden können, heißen unerreichbar. Man kann alle Regeln entfernen, deren linke Seite eine unerreichbare Variable ist, ohne die Sprache zu verändern. Unproduktiv: Suche Variablen, deren Anwendung nie zu einem Wort der Sprache führen kann, und entferne alle Regeln, die eine oder mehrere dieser Variablen (auf rechter und/oder linker Seite) enthalten. Nun ist Grammatik in CNF und reduziert, d.h. wir können nun die Algorithmen betrachten. Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 17/81

18 Inhalt Einführung Theoretische Grundlagen Grammatiken im Allgemeinen Die Chomsky-Hierarchie Die Chomsky-Normalform für kontextfreie Grammatiken Vorgehensweisen beim Parsen Bottom-Up-Parsing CYK (Cocke-Younger-Kasami) -Algorithmus Top-Down-Parsing Allgemeines Prinzip Rekursiver Abstiegsparser Ein- und Ausgabe in Java, C und C++ Reguläre Ausdrücke Zusammenfassung Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 18/81

19 Vorgehensweisen beim Parsen Bottom-Up-Parsing d.h. von unten nach oben ; ausgehend von einem gegebenen Wort wird geprüft, ob es Teil der Sprache sein kann. Algorithmus: CYK Top-Down-Parsing d.h. von oben nach unten ; ausgehend vom Startsymbol wird versucht, mit den Produktionen auf das gegebene Wort zu kommen. Mögliche Umsetzung: Rekursiver Abstiegsparser In beiden Varianten naiver Ansatz möglich: Lösungsweg ausprobieren, bei Misserfolg Backtracking Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 19/81

20 Bottom-Up-Parsing Der CYK-Algorithmus Der Cocke-Younger-Kasami-Algorithmus Unabhängig voneinander in den 1960ern entwickelt Löst das Wortproblem, d.h. die Frage w L(G) für kontextfreie Sprachen in Laufzeit O(n³ * P ) Platz O(n² * P ) wobei n die Wortlänge und P die Menge der Produktionen in G ist. Grobe Idee: Das Wort w = w i...w j kann von A aus hergeleitet werden, wenn es die Regel A BC gibt, und man von B das Teilwort w i...w k und von C das Teilwort w k+1...w j herleiten kann. Bild an der Tafel Einzelne Terminale können direkt hergeleitet werden. Dann Ausprobieren aller Möglichkeiten zur Herleitung von BC Wenn w 1...w n von S herleitbar ist, ist w L(G) Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 20/81

21 Bottom-Up-Parsing Der CYK-Algorithmus Pseudocode des Algorithmus: for i = 1 n for each (l r) P if ( r == w i ) V i,i = V i,i { l } for d = 2 n for i = 1 n d j := i + d; for k = i j 1 V i,j : Variablen, aus denen w i...w j hergeleitet werden kann for each (B V i,k und C V k+1, j ) If ( l BC P ) V i,j := V i,j {l} if S V 1,n /* Wort ist in Sprache */ else /* Wort ist nicht in Sprache */ Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 21/81

22 Bottom-Up-Parsing Der CYK-Algorithmus Beispiel: Grammatik: S AB BC B CC b Wort: babab A BA a C AB a Tafel Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 22/81

23 Bottom-Up-Parsing Der CYK-Algorithmus Beispiel: Grammatik: S AB BC A BA a B CC b C AB a Wort: babab Ausgefüllte Tabelle: b a b a b {B} {A,C} {B} {A,C} {B} {S,A} {S,C} {S,A} {S,C} {S,C} {B} {S,C} {B} {B} {B} S V 1,5 babab L(G) Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 23/81

24 Inhalt Einführung Theoretische Grundlagen Grammatiken im Allgemeinen Die Chomsky-Hierarchie Die Chomsky-Normalform für kontextfreie Grammatiken Vorgehensweisen beim Parsen Bottom-Up-Parsing CYK (Cocke-Younger-Kasami) -Algorithmus Top-Down-Parsing Allgemeines Prinzip Rekursiver Abstiegsparser Ein- und Ausgabe in Java, C und C++ Reguläre Ausdrücke Zusammenfassung Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 24/81

25 Top-Down-Parsen Anderer Ansatz zum Lösen des Wortproblems Arbeitet von oben nach unten Zuerst in die Tiefe Von links nach rechts Regeln wie in der Grammatik angegeben anwenden Grammatik muss frei von Linksrekursionen sein, da sonst Endlosrekursion stattfindet. Laufzeit: O(n n ) Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 25/81

26 Top-Down-Parsen Operationen, die ein Top-Down-Parser verwendet Expand Regel für linkes Ableitungssymbol anwenden, falls es eine Variable ist Scan Ist linkes Ableitungssymbol == linkes Eingabesymbol? Backtrack Kein Erfolg Suche nach Alternativen Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 26/81

27 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor Operation: - L(G)? S den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 27/81

28 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor L(G)? Operation: Expand S VP den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 28/81

29 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor L(G)? Operation: Expand S DET N VP den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 29/81

30 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor L(G)? Operation: Expand S DET N Der VP den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 30/81

31 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor Operation: Scan L(G)? S DET N Der VP den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 31/81

32 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor L(G)? Operation: Expand S DET N Der Student VP den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 32/81

33 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor Operation: Scan L(G)? S DET N Der Student VP den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 33/81

34 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor L(G)? Operation: Expand S DET N V Der Student VP den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 34/81

35 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor L(G)? Operation: Expand S DET N V Der Student sieht VP den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 35/81

36 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor L(G)? Operation: Backtrack S DET N V Der Student sieht VP den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 36/81

37 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor L(G)? Operation: Expand S DET N V VP den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 37/81

38 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor Operation: Scan L(G)? S DET N V VP den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 38/81

39 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor Operation: - L(G)? S DET N V VP den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 39/81

40 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor L(G)? Operation: Backtrack S DET N V Der Student VP den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 40/81

41 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor L(G)? Operation: Backtrack S DET N Der Student VP den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 41/81

42 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor L(G)? Operation: Expand S DET N V Der Student VP den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 42/81

43 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor L(G)? Operation: Expand S DET N V Der Student sieht VP den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 43/81

44 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor L(G)? Operation: Backtrack S DET N V Der Student sieht VP den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 44/81

45 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor L(G)? Operation: Expand S DET N V VP den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 45/81

46 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor Operation: Scan L(G)? S DET N V VP den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 46/81

47 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor L(G)? Operation: Expand S DET N V VP DET N den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 47/81

48 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor L(G)? Operation: Expand S DET N V VP DET N Der den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 48/81

49 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor L(G)? Operation: Backtrack & Expand S DET N V VP DET N die den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 49/81

50 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor L(G)? Operation: Backtrack & Expand S DET N V VP DET N den den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 50/81

51 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor Operation: Scan L(G)? S DET N V VP DET N den den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 51/81

52 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor L(G)? Operation: Expand S DET N V VP DET N den Student den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 52/81

53 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor L(G)? Operation: Backtrack & Expand S DET N V VP DET N den Professor den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 53/81

54 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor Operation: Scan L(G)? S DET N V VP DET N den Professor den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 54/81

55 Top-Down-Parsen Grammatik: S VP DET N VP V V DET Der die den N Student Professor V sieht hasst Frage: den Professor Operation: - L(G)! S DET N V VP DET N den Professor den Professor Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 55/81

56 Top-Down-Parsen Rekursiver Abstiegsparser Mögliche Implementierung eines Top-Down-Parsers: Recursive Descent Parser Wichtig: Grammatik darf keine Linksrekursionen besitzen, d.h. Keine Regeln der Form P PQ Diese können aber bei Bedarf beseitigt werden (Umwandlung in Rechtsrekursion: A AX Y wird zu A YA' A' XA' ε Prinzip des RDP: Pro Produktion eine eigene Funktion Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 56/81

57 Top-Down-Parsen RDP Erstellung eines RDP anhand kleines Beispiels: Hier ohne Backtracking: In jedem Schritt ist eindeutig bestimmt, welche Regel anzuwenden ist Einfachste Möglichkeit: Unterscheidung des ersten Zeichens Beispiel: S A A abb b B ba a Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 57/81

58 Top-Down-Parsen RDP Funktion für S A: public static boolean S(){ // S -> A A(); if(pos == len && accept){ return true; Aktuelle Position } }else{ return false; } Global gesetzt Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 58/81

59 Top-Down-Parsen RDP Funktion für A abb b public static void A(){ // A -> abb if(ismatch('a')){ pos++; B(); B(); // A -> b }else if(ismatch('b')){ pos++; }else{ accept = false; } } ismatch: Hilfsfunktion für aktuelles Zeichen Keine passende Regel Wort nicht akzeptieren Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 59/81

60 Top-Down-Parsen RDP Funktion für B a ba public static void B(){ // B -> a if(ismatch('a')){ pos++; // B -> ba }else if(ismatch('b')){ pos++; A(); }else{ accept = false; } } Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 60/81

61 Top-Down-Parsen RDP Demo Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 61/81

62 Inhalt Einführung Theoretische Grundlagen Grammatiken im Allgemeinen Die Chomsky-Hierarchie Die Chomsky-Normalform für kontextfreie Grammatiken Vorgehensweisen beim Parsen Bottom-Up-Parsing CYK (Cocke-Younger-Kasami) -Algorithmus Top-Down-Parsing Allgemeines Prinzip Rekursiver Abstiegsparser Ein- und Ausgabe in Java, C und C++ Reguläre Ausdrücke Zusammenfassung Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 62/81

63 Ein- und Ausgabe in Java, C und C++ Schema bei Aufgaben Einlesen der Eingabedaten von stdin Algorithmus xyz anwenden Ausgabe der Ergebnisse auf stdout Unter Umständen große Mengen an Daten zu lesen Aufgabe Class Exercise (SS1): Zahlen einlesen, Anfragen auf die Daten Problem: Effizienzunterschiede der einzelnen Möglichkeiten (Zitat aus SS1: As there is a lot of input: do not read input with Java or cin but with scanf or even better with getchar! ) Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 63/81

64 Ein- und Ausgabe in Java Einlesen BufferedReader (in java.io.*) Erstellung eines BufferedReader-Objekts: BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); Wichtige Funktionen des Readers: public int read(); /* Liest ein Zeichen ein. Gibt -1 zurück, wenn das Ende des Streams erreicht ist (EOF) */ public String readline(); /* Ganze Zeile einlesen. Ende der Zeile ist \r, \n oder \r\n */ public int read(char[] cbuf, int off, int len) /* Liest bis zu len characters in das Array cbuf, beginnend an der Stelle cbuf[off] */ Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 64/81

65 Ein- und Ausgabe in Java Einlesen StringTokenizer (in java.util.*) Weiterverarbeitung der gelesenen Zeile Konstruktoraufruf: StringTokenizer st = new StringTokenizer (String str, String delim); Methoden: int counttokens(); /* wie viele Tokens gibt es noch? */ boolean hasmoretokens(); /* gibt es weitere Tokens? */ String nexttoken(); /* nächstes Token zurückgeben */ Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 65/81

66 Ein- und Ausgabe in Java Einlesen Scanner (in java.util.*) Erstellung eines Scanner-Objekts: Scanner in = new Scanner(System.in).useLocale(Locale.ENGLISH); Wichtige Funktionen: public boolean hasnext[int, Float, Double, Long](); /* True, falls es noch ein Token des gewünschten Typs gibt while-schleife fürs Einlesen */ public int nextint() / double nextdouble() ; /* Gibt nächsten Wert als $Datentyp zurück, oder löst eine InputMismatchException aus */ public String nextline(); /* Gibt gesamte aktuelle Zeile als String zurück */ public String next(); /* Gibt nächstes Token als String zurück */ Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 66/81

67 Ein- und Ausgabe in Java Ausgabe System.out.print( $zeug ); $zeug kann aus mehreren verschiedenen Datentypen bestehen, die mittels + konkateniert werden Beispiel: System.out.print(42+" ist die Antwort und " " = pi"); Variante: System.out.println(); (\n hier inklusive) System.out.printf(String format, ); Ausgabe ähnlich zu printf in C, C++: format enthält einen String, in dem mit %_ Platzhalter für verschiedene Typen stehen. Die Werte dafür werden in der Reihenfolge ihres Vorkommens in format angegeben. Beispiele: %d = int, %f = float, %c = char, %x = int als Hexzahl... z.b. System.out.printf("%d, %f, %x",42,3.141,42) erzeugt die Ausgabe 42, 3.141, 2a Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 67/81

68 Ein- und Ausgabe in C/C++ Einlesen int scanf(const char *format, ); (benötigt #include <cstdio> / <stdio.h>) Ignoriert beliebig viele Whitespaces (' ', '\t', '\n') Liest Zeichen an Stellen mit Platzhaltern (%_) in angegebene Variable[n] ein wie bei printf (%d = int, %f = float, ) Sonstige Zeichen müssen genau so in der Eingabe vorkommen Liest von Standardeingabe für andere Inputstreams: int fscanf(file *stream, const char *format,... ); Beispiel: scanf("%d - %f", &a, &b); liest Zeilen der Art ein, speichert 42 in a und in b Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 68/81

69 Ein- und Ausgabe in C/C++ Einlesen char *fgets(char *s, int size, FILE *stream); liest gesamte Zeile (maximal size Zeichen) bis '\n' oder EOF in den Buffer s Buffer muss groß genug sein! char *strtok(char *str, const char *delim); Zerlegung des Strings str an den Zeichen in delim (z.b. strtok("bla+foo", "+"); Rückgabe ist bla) Zweiter Aufruf auf selben String: strtok(null, "+"); Rückgabe ist foo Liefert NULL zurück, wenn keine weiteren Tokens vorhanden Weiterverarbeitung der (char*-) Token: int atoi(const char *nptr); // String -> int double atof(const char *nptr); // String -> double Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 69/81

70 Ein- und Ausgabe in C/C++ Einlesen (nur in C++!): cin (benötigt #include <iostream>) Benutzung: cin >> $Variable >> $Variable >> ; wobei $Variable vom Typ { int,double,long,char, } Einfach zu handhaben, aber langsamer als scanf Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 70/81

71 Ein- und Ausgabe in C/C++ Ausgabe int printf(const char *format,...) Platzhaltersystem, wie schon bei Java erklärt printf("%d - %f", 42, 13.37); /* */ [f]put{c,s} putchar(int c) /* c auf stdout ausgeben */ [f]putc(int c, FILE *stream) /* c auf dem angegebenen Stream ausgeben */ puts(char *s) /* String s auf stdout ausgeben */ fputs(char *s, FILE *stream) /* s auf angegebenem Stream ausgeben */ Schneller als printf Nur in C++: cout Benutzung: cout << $Variable << $Variable << ; Pendant zu cin für Eingabe Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 71/81

72 Ein- und Ausgabe Zeitmessung 3000 x 3000 Integer-Matrix einlesen und ausgeben best worst fgets scanf cin/cout Java BufferedReader Java Scanner gcc / javac 1.6.0_20 auf Core2Quad 2,66GHz, Ubuntu x86_64, Kernel Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 72/81

73 Inhalt Einführung Theoretische Grundlagen Grammatiken im Allgemeinen Die Chomsky-Hierarchie Die Chomsky-Normalform für kontextfreie Grammatiken Vorgehensweisen beim Parsen Bottom-Up-Parsing CYK (Cocke-Younger-Kasami) -Algorithmus Top-Down-Parsing Allgemeines Prinzip Rekursiver Abstiegsparser Ein- und Ausgabe in Java, C und C++ Reguläre Ausdrücke Zusammenfassung Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 73/81

74 Reguläre Ausdrücke Regulärer Ausdruck: Zeichenkette, die eine Menge bzw. eine Untermenge von Zeichenketten beschreibt, welche bestimmten syntaktischen Regeln genügen Beschreiben die regulären Sprachen (Chomsky-3) Filterkriterium für Texte: Abgleich des Musters in der RegExp mit dem Text Matching auf Basis der Regeln im Ausdruck In Java z.b. in der String-Klasse enthalten: String text = "2011"; if(text.matches("[0-9]+")) //text ist eine Zahl Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 74/81

75 Reguläre Ausdrücke Andere Möglichkeit in Java: Matcher-Klasse Zunächst nötig: Regulären Ausdruck (aus String) mittels Pattern p = Pattern.compile(String regexp) kompilieren Aufruf von Matcher m = p.matcher(string input) erzeugt ein Matcher-Objekt, welches unter anderem folgende Methoden anbietet: bool matches(): Versucht, kompletten input zu matchen bool find(): int start(): Versucht, nächsten Teilstring zu finden, der auf das Pattern matcht Liefert Index des ersten passenden characters zurück Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 75/81

76 Inhalt Einführung Theoretische Grundlagen Grammatiken im Allgemeinen Die Chomsky-Hierarchie Die Chomsky-Normalform für kontextfreie Grammatiken Vorgehensweisen beim Parsen Bottom-Up-Parsing CYK (Cocke-Younger-Kasami) -Algorithmus Top-Down-Parsing Allgemeines Prinzip Rekursiver Abstiegsparser Ein- und Ausgabe in Java, C und C++ Reguläre Ausdrücke Zusammenfassung Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 76/81

77 Zusammenfassung So what did we learn from this? Theoretisches Hintergrundwissen Chomsky-Hierarchie der Grammatiken Umformung einer Grammatik in CNF Entfernen von ε-produktionen Neue Terminalregeln Entfernen von Kettenregeln Auflösen längerer Regeln Nur noch Regeln der Form S ε A a A BC Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 77/81

78 Zusammenfassung Bottom-Up-Parsing Ausgehend vom Wort suchen, wie es entstanden sein könnte CYK-Algorithmus Grammatik muss in CNF sein Laufzeit O(n³) Top-Down-Parsing Ausgehend vom Startsymbol Regeln der Grammatik auflösen Backtracking zum Ausprobieren von Alternativen Rekursive Abstiegsparser Eine Funktion pro Regel Vorsicht bei Linksrekursion Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 78/81

79 Zusammenfassung Ein- / Ausgabe in Java, C und C++ Java sehr langsam im direkten Vergleich Schnellste Variante zum Einlesen: fgets + strtok Schnellste Ausgabe: putc (printf aber meist schnell genug!) Nur in C++: cin >> x und cout << x Reguläre Ausdrücke Einfache Möglichkeit, Übereinstimmung von Strings auf bestimmtes Pattern zu überprüfen In Java mit Matcher- oder String-Klasse Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 79/81

80 Schluss, Aus, Ende! Vielen Dank für eure Aufmerksamkeit! The End Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 80/81

81 Literaturhinweise Mitschrift zur Vorlesung Berechenbarkeit und Formale Sprachen, Prof. Rolf Wanka, WS 2010/11 Vortrag Parsen, Dominik Neumann, 2009 Vortrag Parsen, Florian Schornbaum, 2008 C/C++ Reference ( Java 6 API ( Folien zu Theoretische Informatik, Uni Mannheim ( Ti-0809/9/ueb/add/CYK-2.pdf) Java ist auch eine Insel, Christian Ullenboom, Galileo Verlag; 9. Auflage, 2011 TopCoder Forums ( module=thread&threadid=697463&start=0&mc=14) Wikipedia (Regulärer Ausdruck, CYK-Algorithmus) Folien zur Vorlesung Algorithmen und Datenstrukturen, Philippsen/Stamminger/Pflaum/Riehle, WS 2010/11 Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Folie 81/81

Theoretische Grundlagen der Informatik

Theoretische Grundlagen der Informatik Theoretische Grundlagen der Informatik Vorlesung am 12.01.2012 INSTITUT FÜR THEORETISCHE 0 KIT 12.01.2012 Universität des Dorothea Landes Baden-Württemberg Wagner - Theoretische und Grundlagen der Informatik

Mehr

Hallo Welt für Fortgeschrittene

Hallo Welt für Fortgeschrittene Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Inhalt Einführung Theoretische Grundlagen Grammatiken im Allgemeinen Die Chomsky-Hierarchie

Mehr

Hallo Welt für Fortgeschrittene Parsen

Hallo Welt für Fortgeschrittene Parsen Hallo Welt für Fortgeschrittene Parsen Michael Hußnätter 30. April 2014 Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Inhalt Einführung Theoretische Grundlagen Grammatiken im Allgemeinen

Mehr

Hallo Welt für Fortgeschrittene

Hallo Welt für Fortgeschrittene Hallo Welt für Fortgeschrittene Parsen Thomas Wehr Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Inhalt Theoretische Grundlagen Grammatiken im Allgemeinen Die Chomsky-Hierarchie Die Chomsky-Normalform

Mehr

Kapitel 2: Formale Sprachen Kontextfreie Sprachen. reguläre Grammatiken/Sprachen. kontextfreie Grammatiken/Sprachen

Kapitel 2: Formale Sprachen Kontextfreie Sprachen. reguläre Grammatiken/Sprachen. kontextfreie Grammatiken/Sprachen reguläre Grammatiken/prachen Beschreibung für Bezeichner in Programmiersprachen Beschreibung für wild cards in kriptsprachen (/* reguläre Ausdrücke */)?; [a-z]; * kontextfreie Grammatiken/prachen Beschreibung

Mehr

Formale Sprachen und Grammatiken

Formale Sprachen und Grammatiken Formale Sprachen und Grammatiken Jede Sprache besitzt die Aspekte Semantik (Bedeutung) und Syntax (formaler Aufbau). Die zulässige und korrekte Form der Wörter und Sätze einer Sprache wird durch die Syntax

Mehr

Theorie der Informatik

Theorie der Informatik Theorie der Informatik 6. Formale Sprachen und Grammatiken Malte Helmert Gabriele Röger Universität Basel 17. März 2014 Einführung Beispiel: Aussagenlogische Formeln Aus dem Logikteil: Definition (Syntax

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Programmiersprachen und Übersetzer

Programmiersprachen und Übersetzer Programmiersprachen und Übersetzer Sommersemester 2010 19. April 2010 Theoretische Grundlagen Problem Wie kann man eine unendliche Menge von (syntaktisch) korrekten Programmen definieren? Lösung Wie auch

Mehr

Hallo Welt für Fortgeschrittene

Hallo Welt für Fortgeschrittene Hallo Welt für Fortgeschrittene Parsen Dominik Neumann Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Inhalt Begriffserklärung Grundlagen Formale Grammatiken Chomsky-Hierarchie Chomsky-Normalform

Mehr

Grammatiken. Einführung

Grammatiken. Einführung Einführung Beispiel: Die arithmetischen Ausdrücke über der Variablen a und den Operationen + und können wie folgt definiert werden: a, a + a und a a sind arithmetische Ausdrücke Wenn A und B arithmetische

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Einheit 15: Reguläre Ausdrücke und rechtslineare Grammatiken Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Wintersemester 2008/2009 1/25 Was kann man mit endlichen

Mehr

2.11 Kontextfreie Grammatiken und Parsebäume

2.11 Kontextfreie Grammatiken und Parsebäume 2.11 Kontextfreie Grammatiken und Parsebäume Beispiel: Beispiel (Teil 3): Beweis für L(G) L: Alle Strings aus L der Länge 0 und 2 sind auch in L(G). Als Induktionsannahme gehen wir davon aus, dass alle

Mehr

Theoretische Informatik I

Theoretische Informatik I Theoretische Informatik I Einheit 2.4 Grammatiken 1. Arbeitsweise 2. Klassifizierung 3. Beziehung zu Automaten Beschreibungsformen für Sprachen Mathematische Mengennotation Prädikate beschreiben Eigenschaften

Mehr

1 Vom Problem zum Programm

1 Vom Problem zum Programm Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren

Mehr

IT-Basics 2. DI Gerhard Fließ

IT-Basics 2. DI Gerhard Fließ IT-Basics 2 DI Gerhard Fließ Wer bin ich? DI Gerhard Fließ Telematik Studium an der TU Graz Softwareentwickler XiTrust www.xitrust.com www.tugraz.at Worum geht es? Objektorientierte Programmierung Konzepte

Mehr

Theoretische Informatik 2 (WS 2006/07) Automatentheorie und Formale Sprachen 19

Theoretische Informatik 2 (WS 2006/07) Automatentheorie und Formale Sprachen 19 Inhalt 1 inführung 2 Automatentheorie und ormale prachen Grammatiken Reguläre prachen und endliche Automaten Kontextfreie prachen und Kellerautomaten Kontextsensitive und yp 0-prachen 3 Berechenbarkeitstheorie

Mehr

Mathematische Grundlagen der Informatik 2

Mathematische Grundlagen der Informatik 2 Zusammenfassung Math2I Mathematische Grundlagen der Informatik 2 Emanuel Duss emanuel.duss@gmail.com 12. April 2013 1 Zusammenfassung Math2I Mathematische Grundlagen der Informatik 2 Dieses Dokument basiert

Mehr

Einführung in die Programmierung (EPR)

Einführung in die Programmierung (EPR) Goethe-Center for Scientific Computing (G-CSC) Goethe-Universität Frankfurt am Main Einführung in die Programmierung (EPR) (Übung, Wintersemester 2014/2015) Dr. S. Reiter, M. Rupp, Dr. A. Vogel, Dr. K.

Mehr

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales

Mehr

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

Vorlesung Theoretische Informatik

Vorlesung Theoretische Informatik Vorlesung Theoretische Informatik Automaten und Formale Sprachen Hochschule Reutlingen Fakultät für Informatik Masterstudiengang Wirtschaftsinformatik überarbeitet von F. Laux (Stand: 09.06.2010) Sommersemester

Mehr

Wortproblem für kontextfreie Grammatiken

Wortproblem für kontextfreie Grammatiken Wortproblem für kontextfreie Grammatiken G kontextfreie Grammatik. w Σ w L(G)? Wortproblem ist primitiv rekursiv entscheidbar. (schlechte obere Schranke!) Kellerautomat der L(G) akzeptiert Ist dieser effizient?

Mehr

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen Übungen if / else / else if... 2... 2 Aufgabe 2:... 2 Aufgabe 3:... 2 Aufgabe 4:... 2 Aufgabe 5:... 2 Aufgabe 6:... 2 Aufgabe 7:... 3 Aufgabe 8:... 3 Aufgabe 9:... 3 Aufgabe 10:... 3 switch... 4... 4 Aufgabe

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

Parsen Hallo Welt! für Fortgeschrittene

Parsen Hallo Welt! für Fortgeschrittene Parsen Hallo Welt! für Fortgeschrittene Benedikt Rauh Inhalt Einführung Theoretische Grundlagen Grammatiken und Chomsky-Hierarchie Chomsky-Normalform für kontextfreie Grammatiken Parsen Bottom-Up-Parsing

Mehr

Grundlagen der Informatik II. Teil I: Formale Modelle der Informatik

Grundlagen der Informatik II. Teil I: Formale Modelle der Informatik Grundlagen der Informatik II Teil I: Formale Modelle der Informatik 1 Einführung GdInfoII 1-2 Ziele/Fragestellungen der Theoretischen Informatik 1. Einführung abstrakter Modelle für informationsverarbeitende

Mehr

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme und Grammatikregeln

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme und Grammatikregeln Stefan Brass: OOP (Java), 3. Syntaxdiagramme und Grammatikregeln 1/32 Objektorientierte Programmierung Kapitel 3: Syntaxdiagramme und Grammatikregeln Stefan Brass Martin-Luther-Universität Halle-Wittenberg

Mehr

SWE1 / Übung 2 (19.10.2011)

SWE1 / Übung 2 (19.10.2011) SWE1 / Übung 2 (19.1.211) Simulation von Algorithmen Testen, Testplan Beispiel arithmetische Ausdrücke Handsimulation von Algorithmen Man versteht einen Algorithmus (insbesonders einen "Fremden"), wenn

Mehr

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. Einfache Ein- und Ausgabe mit Java 1. Hallo-Welt! Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. /** Die Klasse hello sendet einen

Mehr

Kapitel 2: Formale Sprachen Gliederung

Kapitel 2: Formale Sprachen Gliederung Gliederung 0. Einleitung und Grundbegriffe 1. Endliche Automaten 2. Formale Sprachen 3. Berechnungstheorie 4. Komplexitätstheorie 2.1. Chomsky-Grammatiken 2.2. Reguläre Sprachen 2.3. Kontextfreie Sprachen

Mehr

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

Informatik IC2. Balazs Simon 2005.03.26.

Informatik IC2. Balazs Simon 2005.03.26. Informatik IC2 Balazs Simon 2005.03.26. Inhaltsverzeichnis 1 Reguläre Sprachen 3 1.1 Reguläre Sprachen und endliche Automaten...................... 3 1.2 Determinisieren.....................................

Mehr

Das Briefträgerproblem

Das Briefträgerproblem Das Briefträgerproblem Paul Tabatabai 30. Dezember 2011 Inhaltsverzeichnis 1 Problemstellung und Modellierung 2 1.1 Problem................................ 2 1.2 Modellierung.............................

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund - mit / ohne Parameter - mit / ohne Rückgabewerte

Mehr

Formale Sprachen. Der Unterschied zwischen Grammatiken und Sprachen. Rudolf Freund, Marian Kogler

Formale Sprachen. Der Unterschied zwischen Grammatiken und Sprachen. Rudolf Freund, Marian Kogler Formale Sprachen Der Unterschied zwischen Grammatiken und Sprachen Rudolf Freund, Marian Kogler Es gibt reguläre Sprachen, die nicht von einer nichtregulären kontextfreien Grammatik erzeugt werden können.

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16 Fakultät für Informatik Lehrstuhl 14 Lars Hildebrand, Marcel Preuß, Iman Kamehkhosh, Marc Bury, Diana Howey Übungsblatt

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen Brainfuck 1 Brainfuck 1.1 Brainfuck Geschichte und Umfeld Brainfuck ist eine sogenannte esoterische Programmiersprache. Sie wurde 1993 vom Schweizer Urban Müller entworfen mit dem Ziel, eine Sprache mit

Mehr

188.154 Einführung in die Programmierung für Wirtschaftsinformatik

188.154 Einführung in die Programmierung für Wirtschaftsinformatik Beispiel 1 Vererbung (Liste) Gegeben sind die beiden Klassen ListNode und PersonNode. 188.154 Einführung in die Programmierung für Wirtschaftsinformatik Wiederholung, Prüfungsvorbereitung Monika Lanzenberger

Mehr

Tutorium Informatik 1. Aufgabe 2: Formatierte Ein- und Ausgabe

Tutorium Informatik 1. Aufgabe 2: Formatierte Ein- und Ausgabe Tutorium Informatik 1 Aufgabe 2: Formatierte Ein- und Ausgabe Fachbereich: Elektrotechnik Inhaltsverzeichnis 1 Aufgabe 1 2 Benötigte Funktionen und Schlüsselwörter 2 Robert Halas / FH Regensburg - 2003

Mehr

Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.

Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel. Kontextfreie Kontextfreie Motivation Formale rundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen Bisher hatten wir Automaten, die Wörter akzeptieren Frank Heitmann heitmann@informatik.uni-hamburg.de

Mehr

Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife

Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife Praktikum Ingenieurinformatik Termin 2 Verzweigungen (if-else), printf und scanf, while-schleife 1 1. Import/Export von Eclipse-Projekten 2. Verzweigungen (if-else-anweisung) 3. printf und scanf 4. Übungsaufgaben

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Tutorium 27 29..24 FAKULTÄT FÜR INFORMATIK KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Definition

Mehr

Informatik I Tutorium WS 07/08

Informatik I Tutorium WS 07/08 Informatik I Tutorium WS 07/08 Vorlesung: Prof. Dr. F. Bellosa Übungsleitung: Dipl.-Inform. A. Merkel Tutorium: 12 Tutor: Jens Kehne Tutorium 3: Dienstag 13. November 2007 Übersicht Tutorium Übersicht

Mehr

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung Grundlagen der Programmierung Prof. H. Mössenböck 14. Schrittweise Verfeinerung Entwurfsmethode für Algorithmen Wie kommt man von der Aufgabenstellung zum Programm? Beispiel geg.: Text aus Wörtern ges.:

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Zusatzaufgaben Lösungsvorschlag Objektorientierte Programmierung Lösung 22 (Java und UML-Klassendiagramm)

Mehr

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse Übung 03: Schleifen Abgabetermin: xx.xx.xxxx Name: Matrikelnummer: Gruppe: G1 (Prähofer) G2 (Prähofer) G3 (Wolfinger) Aufgabe Punkte gelöst abzugeben schriftlich abzugeben elektronisch Aufgabe 03.1 12

Mehr

Zusammenfassung. 1 Wir betrachten die folgende Signatur F = {+,,, 0, 1} sodass. 3 Wir betrachten die Gleichungen E. 4 Dann gilt E 1 + x 1

Zusammenfassung. 1 Wir betrachten die folgende Signatur F = {+,,, 0, 1} sodass. 3 Wir betrachten die Gleichungen E. 4 Dann gilt E 1 + x 1 Zusammenfassung Zusammenfassung der letzten LV Einführung in die Theoretische Informatik Woche 7 Harald Zankl Institut für Informatik @ UIBK Wintersemester 2014/2015 1 Wir betrachten die folgende Signatur

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012

Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012 WS 2011/2012 Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012 Prof. Dr. Robert Lorenz Musterlösung zur Vorlesung Informatik I, Extrablatt zu komplexen Datenstrukturen Aufgabe 45 **

Mehr

Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder

Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder Hinweise zur Übung Benötigter Vorlesungsstoff Ab diesem Übungskomplex wird die Kenntnis und praktische Beherrschung der Konzepte

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

Einführung in. Logische Schaltungen

Einführung in. Logische Schaltungen Einführung in Logische Schaltungen 1/7 Inhaltsverzeichnis 1. Einführung 1. Was sind logische Schaltungen 2. Grundlegende Elemente 3. Weitere Elemente 4. Beispiel einer logischen Schaltung 2. Notation von

Mehr

1 Mathematische Grundlagen

1 Mathematische Grundlagen Mathematische Grundlagen - 1-1 Mathematische Grundlagen Der Begriff der Menge ist einer der grundlegenden Begriffe in der Mathematik. Mengen dienen dazu, Dinge oder Objekte zu einer Einheit zusammenzufassen.

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein. Schritt 1: Installation des Javacompilers JDK. Der erste Start mit Eclipse Bevor Sie den Java-Compiler installieren sollten Sie sich vergewissern, ob er eventuell schon installiert ist. Gehen sie wie folgt

Mehr

Äquivalente Grammatiken / attributierte Grammatik

Äquivalente Grammatiken / attributierte Grammatik Äquivalente Grammatiken / attributierte Grammatik Linksfaktorisierung Elimination von Linksrekursion Umwandlung von EBNF in BNF Attributierte Grammatik Semantikfunktionen und Übersetzungsschema Synthetisierte,

Mehr

Software Engineering Klassendiagramme Assoziationen

Software Engineering Klassendiagramme Assoziationen Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen

Mehr

Kapitel 4. Einführung in den Scannergenerator Flex. Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9

Kapitel 4. Einführung in den Scannergenerator Flex. Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9 Kapitel 4 Einführung in den Scannergenerator Flex Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9 Generatoren für die lexikalische Analyse Scannergeneratoren werden eingesetzt um die

Mehr

Übungsblatt 3: Algorithmen in Java & Grammatiken

Übungsblatt 3: Algorithmen in Java & Grammatiken Humboldt-Universität zu Berlin Grundlagen der Programmierung (Vorlesung von Prof. Bothe) Institut für Informatik WS 15/16 Übungsblatt 3: Algorithmen in Java & Grammatiken Abgabe: bis 9:00 Uhr am 30.11.2015

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Einführung in Java PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Gliederung 1. Was ist Java / Geschichte von Java 2. Prinzip der Plattformunabhängigkeit 3. Wie kommt man vom Quellcode zum Programm

Mehr

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11 Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11 Fakultät für Informatik Lehrstuhl 1 Dr. Lars Hildebrand Carla Delgado-Battenfeld Fatih Gedikli Tobias Marschall Benjamin Schowe

Mehr

VBA-Programmierung: Zusammenfassung

VBA-Programmierung: Zusammenfassung VBA-Programmierung: Zusammenfassung Programmiersprachen (Definition, Einordnung VBA) Softwareentwicklung-Phasen: 1. Spezifikation 2. Entwurf 3. Implementierung Datentypen (einfach, zusammengesetzt) Programmablaufsteuerung

Mehr

Rundung und Casting von Zahlen

Rundung und Casting von Zahlen W E R K S T A T T Rundung und Casting von Zahlen Intrexx 7.0 1. Einleitung In diesem Werkstattbeitrag erfahren Sie, wie Zahlenwerte speziell in Velocity, aber auch in Groovy, gerundet werden können. Für

Mehr

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {... PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:

Mehr

Kapitel 2. Methoden zur Beschreibung von Syntax

Kapitel 2. Methoden zur Beschreibung von Syntax 1 Kapitel 2 Methoden zur Beschreibung von Syntax Grammatik, die sogar Könige zu kontrollieren weiß... aus Molière, Les Femmes Savantes (1672), 2. Akt 2 Ziele Zwei Standards zur Definition der Syntax von

Mehr

Kontextfreie Sprachen. Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester Kontextfreie Sprachen

Kontextfreie Sprachen. Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester Kontextfreie Sprachen Automaten und Formale Sprachen alias Theoretische Informatik Sommersemester 2012 Dr. Sander Bruggink Übungsleitung: Jan Stückrath Wortproblem: der CYK-Algorithmus Pumping Lemma für kontextfreie Sprachen

Mehr

SEP 114. Design by Contract

SEP 114. Design by Contract Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18 Kapitel 3 Datentypen und Variablen Seite 1 von 18 Datentypen - Einführung - Für jede Variable muss ein Datentyp festgelegt werden. - Hierdurch werden die Wertemenge und die verwendbaren Operatoren festgelegt.

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

1 topologisches Sortieren

1 topologisches Sortieren Wolfgang Hönig / Andreas Ecke WS 09/0 topologisches Sortieren. Überblick. Solange noch Knoten vorhanden: a) Suche Knoten v, zu dem keine Kante führt (Falls nicht vorhanden keine topologische Sortierung

Mehr

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) Wintersemester 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät für Informatik Lehrstuhl

Mehr

t r Lineare Codierung von Binärbbäumen (Wörter über dem Alphabet {, }) Beispiel code( ) = code(, t l, t r ) = code(t l ) code(t r )

t r Lineare Codierung von Binärbbäumen (Wörter über dem Alphabet {, }) Beispiel code( ) = code(, t l, t r ) = code(t l ) code(t r ) Definition B : Menge der binären Bäume, rekursiv definiert durch die Regeln: ist ein binärer Baum sind t l, t r binäre Bäume, so ist auch t =, t l, t r ein binärer Baum nur das, was durch die beiden vorigen

Mehr

Distributed Computing Group

Distributed Computing Group JAVA TUTORIAL Distributed Computing Group Vernetzte Systeme - SS 06 Übersicht Warum Java? Interoperabilität grosse und gut dokumentierte Library weit verbreitet Syntax sehr nahe an C Erfahrung: Java wird

Mehr

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6 Gudrun Fischer Sascha Kriewel programmierung@is.informatik.uni-duisburg.de Anmeldung zur Klausur! Übungsblatt Nr. 6 Um an der Klausur teilzunehmen, müssen sich Studierende der angewandten Informatik in

Mehr

Klausur in Programmieren

Klausur in Programmieren Studiengang Sensorik/Sensorsystemtechnik Note / normierte Punkte Klausur in Programmieren Wintersemester 2010/11, 17. Februar 2011 Dauer: 1,5h Hilfsmittel: Keine (Wörterbücher sind auf Nachfrage erlaubt)

Mehr

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe Aufgabenstellung Für eine Hausverwaltung sollen für maximal 500 Wohnungen Informationen gespeichert werden, die alle nach der gleichen Weise wie folgt strukturiert sind: Art Baujahr Wohnung Whnginfo Nebenkosten

Mehr

Kapiteltests zum Leitprogramm Binäre Suchbäume

Kapiteltests zum Leitprogramm Binäre Suchbäume Kapiteltests zum Leitprogramm Binäre Suchbäume Björn Steffen Timur Erdag überarbeitet von Christina Class Binäre Suchbäume Kapiteltests für das ETH-Leitprogramm Adressaten und Institutionen Das Leitprogramm

Mehr

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala Das Typsystem von Scala 1 Eigenschaften Das Typsystem von Scala ist statisch, implizit und sicher 2 Nichts Primitives Alles ist ein Objekt, es gibt keine primitiven Datentypen scala> 42.hashCode() res0:

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Tutorium 4 26..25 INSTITUT FÜR THEORETISCHE INFORMATIK KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu

Mehr

Eine Logikschaltung zur Addition zweier Zahlen

Eine Logikschaltung zur Addition zweier Zahlen Eine Logikschaltung zur Addition zweier Zahlen Grundlegender Ansatz für die Umsetzung arithmetischer Operationen als elektronische Schaltung ist die Darstellung von Zahlen im Binärsystem. Eine Logikschaltung

Mehr

Was ist ein Compiler?

Was ist ein Compiler? Was ist ein Compiler? Was ist ein Compiler und worum geht es? Wie ist ein Compiler aufgebaut? Warum beschäftigen wir uns mit Compilerbau? Wie ist die Veranstaltung organisiert? Was interessiert Sie besonders?

Mehr

Informatik I WS 07/08 Tutorium 24

Informatik I WS 07/08 Tutorium 24 Info I Tutorium 24 Informatik I WS 07/08 Tutorium 24 20.12.07 Bastian Molkenthin E-Mail: infotut@sunshine2k.de Web: http://infotut.sunshine2k.de Rückblick Semi-Thue-Systeme Ein Semi-Thue-System besteht

Mehr

Java Einführung Operatoren Kapitel 2 und 3

Java Einführung Operatoren Kapitel 2 und 3 Java Einführung Operatoren Kapitel 2 und 3 Inhalt dieser Einheit Operatoren (unär, binär, ternär) Rangfolge der Operatoren Zuweisungsoperatoren Vergleichsoperatoren Logische Operatoren 2 Operatoren Abhängig

Mehr

5.2 Neue Projekte erstellen

5.2 Neue Projekte erstellen 5.2 Neue Projekte erstellen Das Bearbeiten von bestehenden Projekten und Objekten ist ja nicht schlecht wie aber können Sie neue Objekte hinzufügen oder gar völlig neue Projekte erstellen? Die Antwort

Mehr

Übungen für Woche 10

Übungen für Woche 10 Übungen für Woche 10 Martin Rubey 12. Januar 2011 Die folgenden Übungen sollen den Umgang mit Backtracking und kombinatorischen Spezies näherbringen. Genaue Hinweise gibt es erst auf Seite 5. Zur Erinnerung:

Mehr

Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Prof. Dr. Uwe Schmidt 21. August 2007 Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Zeit: 75 Minuten erlaubte Hilfsmittel: keine Bitte tragen Sie Ihre Antworten und fertigen

Mehr

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"

Mehr

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-12-13/infoeinf WS12/13 Arrays: Wiederholung Ein Array ist ein Tupel von Elementen gleichen

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens 1 Organisatorisches Freitag, 05. Mai 2006: keine Vorlesung! aber Praktikum von 08.00 11.30 Uhr (Gruppen E, F, G, H; Vortestat für Prototyp)

Mehr

Computeranwendung und Programmierung (CuP)

Computeranwendung und Programmierung (CuP) Computeranwendung und Programmierung (CuP) VO: Peter Auer (Informationstechnologie) UE: Norbert Seifter (Angewandet Mathematik) Organisatorisches (Vorlesung) Vorlesungszeiten Montag 11:15 12:45 Freitag

Mehr

Algorithmen & Datenstrukturen 1. Klausur

Algorithmen & Datenstrukturen 1. Klausur Algorithmen & Datenstrukturen 1. Klausur 7. Juli 2010 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 35 2 30 3 30 4 15 5 40 6 30 Gesamt 180 1 Seite 2 von 14 Aufgabe 1) Programm Analyse

Mehr

Einführung in die Theoretische Informatik

Einführung in die Theoretische Informatik Einführung in die Theoretische Informatik Woche 10 Harald Zankl Institut für Informatik @ UIBK Wintersemester 2014/2015 Zusammenfassung Zusammenfassung der letzten LV Satz Sei G = (V, Σ, R, S) eine kontextfreie

Mehr