Hallo Welt für Fortgeschrittene
|
|
- Til Achim Jaeger
- vor 8 Jahren
- Abrufe
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 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
MehrHallo 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
MehrHallo 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
MehrHallo 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
MehrKapitel 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
MehrFormale 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
MehrTheorie 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
MehrProgrammierkurs 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
MehrProgrammiersprachen 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
MehrHallo 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
MehrGrammatiken. 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
MehrGrundbegriffe 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
Mehr2.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
MehrTheoretische 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
Mehr1 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
MehrIT-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
MehrTheoretische 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
MehrMathematische 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
MehrEinfü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.
MehrM. 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
MehrLineargleichungssysteme: Additions-/ Subtraktionsverfahren
Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als
MehrEinfü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
MehrVorlesung 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
MehrWortproblem 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 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
MehrII. 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
MehrParsen 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
MehrGrundlagen 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
MehrEinfache 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"
MehrJava 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
MehrObjektorientierte 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
MehrSWE1 / Ü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
MehrDas 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
MehrKapitel 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
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:
MehrInformatik 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.....................................
MehrDas Briefträgerproblem
Das Briefträgerproblem Paul Tabatabai 30. Dezember 2011 Inhaltsverzeichnis 1 Problemstellung und Modellierung 2 1.1 Problem................................ 2 1.2 Modellierung.............................
MehrEinfü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
MehrFormale 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.
MehrDer 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.
MehrPraktikum 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
MehrObjektorientierte 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
MehrBrainfuck. 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
Mehr188.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
MehrTutorium 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
MehrMotivation. 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
MehrPraktikum 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
MehrGrundbegriffe 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
MehrInformatik 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
MehrGrundlagen 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.:
MehrObjektorientierte 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 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
MehrZusammenfassung. 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
MehrJava: 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
MehrFakultä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 Hinweise zur Übung Benötigter Vorlesungsstoff Ab diesem Übungskomplex wird die Kenntnis und praktische Beherrschung der Konzepte
MehrEinfü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
MehrEinfü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
Mehr1 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.
MehrBinä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
MehrEs 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 Linksfaktorisierung Elimination von Linksrekursion Umwandlung von EBNF in BNF Attributierte Grammatik Semantikfunktionen und Übersetzungsschema Synthetisierte,
MehrSoftware 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
MehrKapitel 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
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
MehrGrundlagen 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.
MehrEinfü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 Fakultät für Informatik Lehrstuhl 1 Dr. Lars Hildebrand Carla Delgado-Battenfeld Fatih Gedikli Tobias Marschall Benjamin Schowe
MehrVBA-Programmierung: Zusammenfassung
VBA-Programmierung: Zusammenfassung Programmiersprachen (Definition, Einordnung VBA) Softwareentwicklung-Phasen: 1. Spezifikation 2. Entwurf 3. Implementierung Datentypen (einfach, zusammengesetzt) Programmablaufsteuerung
MehrRundung 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
MehrVerhindert, 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:
MehrKapitel 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
MehrKontextfreie 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
MehrSEP 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
MehrWintersemester 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.
MehrJava 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
Mehr1 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
MehrEinfü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
Mehrt 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
MehrDistributed 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
MehrFachgebiet 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
MehrKlausur 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)
MehrHochschule 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
MehrKapiteltests 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
MehrDas 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:
MehrGrundbegriffe 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
MehrEine 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
MehrWas 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?
MehrInformatik 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
MehrJava 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
Mehr5.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 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:
MehrProf. 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
MehrArrays 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"
MehrArrays 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
MehrObjektorientierte 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/
MehrAlgorithmen 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)
MehrComputeranwendung 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
MehrAlgorithmen & 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
MehrEinfü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