Hallo Welt für Fortgeschrittene
|
|
- Louisa Reuter
- vor 6 Jahren
- Abrufe
Transkript
1 Hallo Welt für Fortgeschrittene Parsen Andreas Hammer 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-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 Hammer Folie 2/80
3 Einführung Definition des Begriffs Parser : Ein Parser ist ein Computerprogramm, das in der Informatik für die Zerlegung und Umwandlung einer beliebigen Eingabe in ein für die Weiterverarbeitung brauchbares Format zuständig ist. Beispiele für Parser: Compiler von Programmiersprachen TeX/LaTeX Intelligente Suche z.b. Wie wird morgen das Wetter? Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 3/80
4 Einführung - Compiler Vereinfachte Funktionsweise: 1. Analysephase Lexikalische Analyse (Zerteilung des Textes in Token) Syntaktische Analyse Überprüfung, ob Syntax stimmt, dem Standard entspricht Umwandlung in Syntaxbaum, Analyse mit Parser Fehler, falls Syntaxprüfung oder Analyse nicht funktioniert (der Code nicht korrekt ist) Semantische Analyse ( Macht der Code Sinn? ), weitere Sprachbedingungen prüfen 2. Synthesephase Zwischenprodukte (Header inkludieren, Makros einfügen, ) Optimierung (wenn gewünscht) Endprodukt (Maschinencode) erzeugen Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 4/80
5 Einführung - Syntaxbaum Beispiel für den Syntaxbaum einer natürlichen Sprache Grammatik ist hier, was man klassisch unter Grammatik versteht Satz Subjekt Prädikat Artikel Substantiv Verb Die Katze schläft Erforschung der Struktur von Sprachen u.a. durch Noam Chomsky (Chomsky-Hierarchie) Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 5/80
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-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 Hammer Folie 6/80
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: Startsymbol, S V P: endliche Menge von Produktionen der Form ((V Σ) + \ Σ*) x (V Σ)* Anschaulich: Menge von Ableitungsregeln P Q, wobei P aus mindestens einer Variable und optional Terminalen und Q aus beliebig vielen Variablen und Terminalen besteht. Allgemeinster Typ: Chomsky-0-Grammatik Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 7/80
8 Theoretische Grundlagen Chomsky-Hierarchie (1) 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: wie auf vorheriger Folie Chomsky-1, kontextsensitiv : Wie Chomsky-0, zusätzlich: (u v) P: u v Erweiterung: S ε erlaubt, wenn S nie rechts vorkommt Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 8/80
9 Theoretische Grundlagen Chomsky-Hierarchie (2) Chomsky-2, kontextfrei (für uns interessant): Wie Chomsky-1, zusätzlich: Links darf nur eine Variable stehen Chomsky-3, regulär : Wie Chomsky-2, zusätzlich: Alle Produktionen haben die Form A ab (rechtsregulär) oder A Ba (linksregulär) A a A ε für A, B V, a Σ Im Folgenden: Details der kontextfreien Grammatik Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 9/80
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 Erzeugt mathematische Ausdrücke mit Zahlen 1-4, Operatoren Plus und Mal, wertet diese in der richtigen Reihenfolge aus, und lässt Klammerung zu Tafel Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 10/80
11 Theoretische Grundlagen Chomsky-Normalform Für die Anwendung bestimmter Algorithmen muss die Grammatik in einer dafür geeigneten Normalform vorliegen. Für CYK: Chomsky-Normalform Definition: Eine kontextfreie Grammatik ist in ChomskyNormalform (CNF), wenn jede Regel in der Form A BC oder A a S ε ist, mit A V, B, C V \ {S} und a Σ. Jede kontextfreie Grammatik kann in eine CNF umgewandelt werden. Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 11/80
12 Theoretische Grundlagen Chomsky-Normalform Algorithmus zur Umformung einer kontextfreien Grammatik in CNF: 1. Eliminiere ε-produktionen 2. Für jedes Terminalsymbol a: Führe eine neue Variable Aa und eine neue Regel Aa a ein; ersetze alle Vorkommen von a durch Aa 3. Eliminiere Kettenregeln 4. Löse Regeln mit mehr als 2 Variablen auf der rechten Seite auf 5. Entferne unerreichbare und unproduktive Variablen Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 12/80
13 Theoretische Grundlagen CNF-Umformung (1) Elimination von ε-produktionen: Entferne alle Regeln der Form A ε Für jede Regel, die auf A abbildet, füge weitere Regel hinzu, in der A gestrichen wurde Ausnahme: Falls Startsymbol auf ε abbildet (S ε) In diesem Fall: Füge neues Startsymbol S' ein und neue Regeln: S' ε und S' S Beispiel: S A, A BC, B b ε, C c Tafel Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 13/80
14 Theoretische Grundlagen CNF-Umformung (1) Elimination von ε-produktionen: Entferne alle Regeln der Form A ε Für jede Regel, die auf A abbildet, füge weitere Regel hinzu, in der A gestrichen wurde Ausnahme: Falls Startsymbol auf ε abbildet (S ε) In diesem Fall: Füge neues Startsymbol S' ein und 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 Hammer Folie 14/80
15 Theoretische Grundlagen CNF-Umformung (2) Für jedes Terminalsymbol a: Einführung einer neuen Variable Aa und einer neuen Regel Aa a; ersetze alle Vorkommen von a durch Aa Ziel: Entfernung gemischter Produktionen, die rechts Terminale und Nicht-Terminale enthalten Beispiel: A Ab wird zu A AAb, Ab b Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 15/80
16 Theoretische Grundlagen CNF-Umformung (3) Elimination von Kettenregeln: Ziel: Entfernung von Regeln, die später zur Endlosrekursion führen würden ( im Kreis laufen ) Konstruiere Graph aus Regeln, suche darin nach Zyklen Ersetze bei jedem Zyklus die zugehörigen Variablen durch genau eine davon, ersetze alle Vorkommen der ersetzten Variable durch die genau eine (S darf nicht ersetzt werden). Ersetze zum Schluss die übrigen Kettenregeln durch die Regeln A alle rechten Seiten Beispiel: A BC E E XZ F F A Z Z ae A BC A A XZ A A A Z Z ae A BC XZ ae Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 16/80
17 Theoretische Grundlagen CNF-Umformung (4) Auflösung von Regeln mit mehr als 2 Variablen auf der rechten Seite Vorgehen: Ersetze so lange jeweils 2 benachbarte Symbole AB auf der rechten Seite durch neue Var. X, füge neue Regel X AB hinzu, bis keine Regeln mit mehr als 2 Variablen mehr existieren Beispiel: A BCDEF Tafel Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 17/80
18 Theoretische Grundlagen CNF-Umformung (4) Auflösung von Regeln mit mehr als 2 Variablen auf der rechten Seite Vorgehen: Ersetze so lange jeweils 2 benachbarte Symbole AB auf der rechten Seite durch neue Var. X, füge neue Regel X AB hinzu, bis keine Regeln mit mehr als 2 Variablen mehr existieren Beispiel: A BCDEF A XDEF, X AB A YEF, Y XD, X AB A ZF, Z YE, Y XD, X AB Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 18/80
19 Theoretische Grundlagen CNF-Umformung (5) Entferne unerreichbare und unproduktive Variablen (Reduzieren der CNF) Unerreichbar: Variablen, die vom Startsymbol aus nie erreicht werden können Regeln, deren linke Seite eine unerreichbare Variable ist, kann ohne Veränderung der Sprache entfernt werden Unproduktiv: Variablen, deren Anwendung nie zu einem Wort der Sprache führen kann Diese Regeln können (und sollen) ebenso entfernt werden Grammatik ist nun in CNF und reduziert Bereit für die Algorithmen Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 19/80
20 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-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 Hammer Folie 20/80
21 Vorgehensweisen beim Parsen Bottom-Up-Parsing von unten nach oben, für gegebenes Wort wird geprüft, ob es der Grammatik entspricht Algorithmus: CYK Top-Down-Parsing von oben nach unten, wende Regeln der Grammatik an, versuche daraus das Wort zu bilden Mögliche Umsetzung: Rekursiver Abstiegsparser (RDP) Beide Male Backtracking möglich, aber nicht performant Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 21/80
22 Bottom-Up-Parsing Der CYK-Algorithmus Cocke-Younger-Kasami-Algorithmus Da fehlt doch Magenta! Unabhängig voneinander in den 1960er Jahren entwickelt Beantwortet die Frage w L(G)? für kontextfreie Sprachen mit Wortlänge n und Anzahl Produktionen P in Laufzeit Platz O(n3 * P ) O(n2 * P ) Idee: Aufteilen des Wortes in Fragmente, die von Produktionen erzeugt werden Tafel Einzelne Terminale können direkt hergeleitet werden Backtracking Ausprobieren aller Möglichkeiten Kann durch Dynamische Programmierung beschleunigt werden Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 22/80
23 Bottom-Up-Parsing Der CYK - Algorithmus Pseudocode des Algorithmus: Für i = 1 n Für jede Produktion (l r) P Falls r = wi Setze Vi,1 := Vi,1 {l} vi,j: Variablen, aus denen wi...wj hergeleitet werden Für d = 2 n Für i = 1 n d kann Setze j := i + d Für k = 1 j 1 Für jedes (B Vi,k und C Vk+1,j) Wenn (l BC P) Vi,j := Vi,j {l} Wenn S V1,n Wort ist enthalten Sonst Wort ist nicht enthalten Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 23/80
24 Bottom-Up-Parsing Der CYK - Algorithmus Beispiel: Grammatik: S AB BC B CC b A BA a C AB a Zu prüfendes Wort:? Tafel Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 24/80
25 Bottom-Up-Parsing Der CYK - Algorithmus Beispiel: Grammatik: S AB BC B CC b A BA a C AB a Zu prüfendes Wort: babab 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 V1,5 babab L(G) Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 25/80
26 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-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 Hammer Folie 26/80
27 Top-Down-Parsing Gleiches Problem, umgekehrte Lösung Arbeitet von oben nach unten Tiefensuche: oben unten, links rechts Versuche, Regeln der Grammatik anzuwenden, um zu prüfenden Satz zu bilden Grammatik darf keine Linksrekursion enthalten, sonst Endlosrekursion Laufzeit: O(nn) Normal für Backtracking-Algorithmen Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 27/80
28 Top-Down-Parsing Operationen eines Top-Down-Parsers: Expand Für gefundene Variable eine Regel der Grammatik anwenden z.b. X ab (Vorkommen von X mit ab ersetzen) Scan Vergleiche Ableitungssymbol mit Eingabesymbol ( Wurde das gleiche Wort gebildet? ) Wenn gleich: Weiter expanden, wenn nicht: Backtrack gehe Schritt zurück, versuche nächste Möglichkeit Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 28/80
29 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S Frage: Die Katze frisst die Maus L(G)? Operation: Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 29/80
30 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP VP Frage: Die Katze frisst die Maus L(G)? Operation: Expand Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 30/80
31 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET VP N Frage: Die Katze frisst die Maus L(G)? Operation: Expand Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 31/80
32 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET VP N Frage: Die Katze frisst die Maus L(G)? Die Operation: Expand Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 32/80
33 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET VP N Frage: Die Katze frisst die Maus L(G)? Die Operation: Scan Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 33/80
34 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET VP N Frage: Die Katze frisst die Maus L(G)? Die Katze Operation: Expand Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 34/80
35 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET VP N Frage: Die Katze frisst die Maus L(G)? Die Katze Operation: Scan Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 35/80
36 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET N VP V Frage: Die Katze frisst die Maus L(G)? Die Katze Operation: Expand Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 36/80
37 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET N VP V Frage: Die Katze frisst die Maus L(G)? Die Katze jagt Operation: Expand Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 37/80
38 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET N VP V Frage: Die Katze frisst die Maus L(G)? Die Katze jagt Operation: Backtrack Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 38/80
39 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET N VP V Frage: Die Katze frisst die Maus L(G)? Die Katze frisst Operation: Expand Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 39/80
40 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET N VP V Frage: Die Katze frisst die Maus L(G)? Die Katze frisst Operation: Scan Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 40/80
41 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET N VP V Frage: Die Katze frisst die Maus L(G)? Die Katze frisst Operation: Scan Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 41/80
42 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET N VP V Frage: Die Katze frisst die Maus L(G)? Die Katze Operation: Backtrack Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 42/80
43 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET N VP V NP Frage: Die Katze frisst die Maus L(G)? Die Katze Operation: Expand Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 43/80
44 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET N VP V NP Frage: Die Katze frisst die Maus L(G)? Die Katze jagt Operation: Expand Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 44/80
45 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET N VP V NP Frage: Die Katze frisst die Maus L(G)? Die Katze jagt Operation: Backtrack Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 45/80
46 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET N VP V NP Frage: Die Katze frisst die Maus L(G)? Die Katze frisst Operation: Expand Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 46/80
47 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET N VP V NP Frage: Die Katze frisst die Maus L(G)? Die Katze frisst Operation: Scan Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 47/80
48 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET N VP NP V DET Frage: Die Katze frisst die Maus L(G)? Die Katze frisst Operation: Expand Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 48/80 N
49 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET N VP NP V DET Frage: Die Katze frisst die Maus L(G)? Die Katze frisst Die Operation: Expand Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 49/80 N
50 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET N VP NP V DET Frage: Die Katze frisst die Maus L(G)? Die Katze frisst die Operation: Backtrack & Expand Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 50/80 N
51 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET N VP NP V DET Frage: Die Katze frisst die Maus L(G)? Die Katze frisst die Operation: Scan Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 51/80 N
52 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET N VP NP V DET N Frage: Die Katze frisst die Maus L(G)? Die Katze frisst die Katze Operation: Expand Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 52/80
53 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET N VP NP V DET N Frage: Die Katze frisst die Maus L(G)? Die Katze frisst die Maus Operation: Backtrack & Expand Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 53/80
54 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET N VP NP V DET N Frage: Die Katze frisst die Maus L(G)? Die Katze frisst die Maus Operation: Scan Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 54/80
55 Top-Down-Parsen (Demo) Grammatik: S NP VP NP DET N VP V V NP DET Die die den N Katze Maus V jagt frisst S NP DET N VP NP V DET N Frage: Die Katze frisst die Maus L(G)! Die Katze frisst die Maus Operation: Fertig Die Katze frisst die Maus Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 55/80
56 Top-Down-Parsen Rekursiver Abstiegsparser Wie setzt man das um? Recursive Descent Parser Erinnerung: Grammatik darf keine Linksrekursion besitzen! Regeln der Form S Sb können aber leicht umgewandelt werden: A AX Y wird zu A YA' A' XA' ε Grundprinzip der Implementierung: Pro Produktion eine eigene Funktion, die nur diese Produktion prüft Besonders schön für Grammatiken, bei denen man nicht backtracken muss Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 56/80
57 Top-Down-Parsen Rekursiver Abstiegsparser Beispiel: S AB A a ab B b ba Eine Funktion pro Regel pos = Position im Wort len = Länge des Wortes accept = Globales Flag Code: fun S() { //S A A(); B(); if(pos!= len) { accept = false; } } Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 57/80
58 Top-Down-Parsen Rekursiver Abstiegsparser Code (weiter): fun A() { //A a ab if(matches('a')) { pos++; if(pos!= len) { B(); } } else { accept = false; } } fun B() { //B b ba if(matches('b')) { pos++; if(pos!= len) { if(matches('a')) { pos++; } else { accept = false; } } } else { accept = false; } } Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 58/80
59 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-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 Hammer Folie 59/80
60 Ein- und Ausgabe in Java, C und C++ Gleiches Schema bei Aufgaben Einlesen von stdin Algorithmen anwenden Ausgeben auf stdout Zu lesende und verändernde Daten können groß werden Aufgabe Class Exercise (SS1): Zahlen einlesen, Anfragen auf die Daten Problem: Effiziente Ein- und Ausgabemechanismen benötigt Bei großen Datenmengen ist C/C++ besser geeignet als Java Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 60/80
61 Ein- und Ausgabe in Java Einlesen BufferedReader (in java.io.*) Initialisierung: BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); Wichtige Methoden: public int read(); Liest einzelnes Zeichen, gibt bei EOF -1 zurück. Wie getc in C. public String readline(); Liest ganze Zeile ein. Newline ist \r, \n oder \r\n public int read(char[] cbuf, int off, int len) Schreibt bis zu len Chars nach cbuf+off. Wie fgets in C. Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 61/80
62 Ein- und Ausgabe in Java Einlesen StringTokenizer (in java.util.*) Zur Weiterverarbeitung eines eingelesenen Strings ( einer Zeile ) Initialisierung: StringTokenizer st = new StringTokenizer(String str, String delim); Wichtige Methoden: int counttokens(); Gibt die Anzahl der verbleibenden Tokens zurück boolean hasmoretokens(); Gibt es verbleibende Tokens? (z.b. Prüfung in while-schleife) string nexttoken(); Gibt den nächsten Token zurück...und viele mehr Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 62/80
63 Ein- und Ausgabe in Java Einlesen Scanner (in java.util.*) Noch komfortabler, aber langsamer (reicht trotzdem für fast alle Aufgaben aus) Initialisierung: Scanner in = new Scanner(System.in).useLocale(Locale.ENGLISH); Wichtige Methoden: public boolean hasnext[int, Float, Double, Long](); Gibt es einen nächsten Int-, Float-, -Wert? public int nextint(), float nextfloat(), Gib den nächsten Int-, Float-, -Wert zurück public String nextline(); Gibt komplette Zeile zurück public String next(); Gibt nächstes Token als String zurück Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 63/80
64 Ein- und Ausgabe in Java Ausgabe System.out.print($ausgabe) $ausgabe kann alles sein, was tostring() implementiert, nicht nur primitive Datentypen Konkatenieren mit +, Automatisches \n mit System.out.println(); Beispiel: System.out.print( Das ist Test ); System.out.printf(String format, $ausgabe); Ähnlich wie printf in C Formatstring enthält Anweisungen, wie Argumente in $ausgabe ausgeben werden sollen Beispiele: %d = int, %f = float, %.2f = float mit 2 Nachkommastellen, %c = char, %x = int als Hex,... z.b. System.out.printf( %d, %f, %x, 1337, 13.37, 51966); gibt aus: 1337, 13.37, cafe Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 64/80
65 Ein- und Ausgabe in C/C++ Einlesen int scanf(const char *format, ); (#include <cstdio> / <stdio.h>) Ignoriert Whitespace (' ', '\t', '\n') Liest Zeichen an im Formatstring angegebenen Stellen automatisch in Variablen ein, Rest der Zeichen muss genau so vorkommen Falls anderer Stream als stdin: int fscanf(file *stream, const char *format, ); Beispiel: scanf( %d - %f, &a, &b); Bei Eingabe steht danach in a 42, in b Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 65/80
66 Ein- und Ausgabe in C/C++ Einlesen char *fgets(char *s, int size, FILE *stream); Liest, bis size Zeichen oder '\n' erreicht sind/ist nach s Buffer s muss groß genug sein! char *strtok(char *str, const char *delim); Zerlegung von str bei jedem Vorkommen von delim Erster Aufruf: strtok(zusplittenderstring, delim); Alle nachfolgenden: strtok(null, delim); Gibt NULL zurück, wenn kein weiterer Token gefunden wurde Weiterverarbeitung z.b. mit atoi (String int) oder atof (String float Vorsicht! strtok macht den String kaputt! Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 66/80
67 Ein- und Ausgabe in C/C++ Einlesen (C++) cin (#include <iostream>) Benutzung: cin >> var1 >> var2 >> ; varx kann z.b. int, double, long, char u.s.w. sein Komfortabler, aber etwas langsamer als scanf oder fgets + strtok Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 67/80
68 Ein- und Ausgabe in C/C++ Ausgabe int printf(const char *format, ) Benutzung wie in Java mit Formatstring und Argumenten putc, puts, fputc, fputs putc(int c): gibt einzelnen Char auf stdout aus puts(char *s): gibt Char-Array (String) auf stdout aus fputc(int c, FILE *stream), fputs(char *s, FILE *stream): das gleiche mit beliebigen Streams Schneller als printf Nur in C++: cout Benutzung: cout << var1 << var2 << ; Wie cin, nur eben Ausgabe Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 68/80
69 Ein- und Ausgabe - Zeitmessung 5000 x 5000 Integer-Matrix einlesen und ausgeben (in Sekunden) worst avg best fgets scanf cin/cout Java BufferedReader Java Scanner Gcc / javac 1.7.0_51 auf Quad 3.3GHz, Debian x86_64, Kernel Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 69/80
70 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-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 Hammer Folie 70/80
71 Reguläre Ausdrücke Regulärer Ausdruck = Zeichenkette, die die Struktur einer Zeichenkette beschreibt. Dagegen kann dann gematched werden Beschreibt die regulären Sprachen (Chomsky-3) Zum Filtern oder erkennen von Texten geeignet, weit flexibler als nur z.b. strtok & atoi In Java in der String-Klasse enthalten: String text = 2015 ; if(text.matches( [0-9]+ )) {//text ist eine Zahl} [0-9]+ bedeutet Es komme mindestens einmal ein Zeichen aus dem Bereich '0'-'9' vor Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 71/80
72 Reguläre Ausdrücke in Java Beispiele: [0-9][0-35-9] Ziffer von 0-9, gefolgt von einer Ziffer von 0-3 oder 5-9 [3-5][a-zA-Z]? Ziffer [ ], optional gefolgt von Groß- oder Kleinbuchstabe [0-9]*[a-z]+ Keine oder beliebig viele Ziffern, gefolgt von mindestens einem Buchstaben Das.*Test Beliebige, beliebig viele Zeichen zwischen Leerzeichen und T z.b. Das ist ein Test, Das Test, Das Herpaderp Test, [^a-e] Negation, beliebiges Zeichen außer a-e Römer geht (nach Haus in das Haus) Zusammenfassen von Zeichenfolgen Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 72/80
73 Reguläre Ausdrücke in Java Alternative in Java: Matcher-Klasse Zuerst Reg. Ausdruck zu Pattern umwandeln: Pattern p = Pattern.compile(String regexp); Danach Matcher-Objekt erzeugen: Matcher m = p.matcher(string input) Damit sind folgende Methoden möglich: bool matches(): bool find(): int start(): Matcht kompletten input-string Versucht, einen Teilstring von input auf das Muster zu matchen Gibt Index des ersten passenden chars zurück etc. Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 73/80
74 Reguläre Ausdrücke in C++11 und Python C++11: bool regex_match(string search, string regex): Sucht Matches von regex in search, gibt bei Erfolg true zurück bool regex_search(string search, string regex): Wie match, aber sucht nach Substrings und matcht diese string regex_replace(string search, string regex, string replace): Ersetzt jedes Vorkommen von regex in search durch replace Python: re-modul, ähnlich wie Matcher in Java: import re matcher = re.compile( RegExp ) match = matcher.match( Suchstring ) Match ist None, wenn nichts gefunden wurde, oder lässt durch match.group() bzw. match.groups() auf gefundene(n) String(s) zugreifen Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 74/80
75 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-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 Hammer Folie 75/80
76 Zusammenfassung Wichtig für das Verständnis: Theoretisches Hintergrundwissen Formale Grammatiken ( Chomsky-Hierarchie) Umformung nach CNF, um div. Algorithmen anwenden zu können Entfernen von ε-produktionen Neue Terminalregeln Entfernen von Kettenregeln Auflösen längerer Regeln Ziel: Nur noch Regeln der Form S ε A b A Bb B c Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 76/80
77 Zusammenfassung Bottom-Up-Parsing Fange mit Wort an, finde heraus, wie es entstanden sein könnte CYK-Algorithmus Vorher: Grammatik nach CNF umwandeln Laufzeit: O(n3) Top-Down-Parsing Fange mit Startsymbol an, versuche Wort zu bilden Backtracking ( Trial and Error ) Rekursive Abstiegsparser Jede Regel in Funktion umwandeln Linksrekursion vermeiden Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 77/80
78 Zusammenfassung Ein-/Ausgabe in Java, C und C++ Java im Vergleich am Langsamsten Bequemste Variante zum Einlesen: java.util.scanner Schnellste Variante: fgets + strtok Schnellste Ausgabe: putc, printf reicht aber fast immer aus Reguläre Ausdrücke Flexibler und komfortabler In Java mit Matcher- oder String-Klasse Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 78/80
79 Ende Vielen Dank für eure Aufmerksamkeit! Fragen? Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 79/80
80 Literaturhinweise Mitschrift zur Vorlesung Berechenbarkeit und Formale Sprachen, Prof. Rolf Wanka, WS14/15 Vortrag Parsen, Andreas Ruprecht, 2011 C/C++ Reference ( Java 7 API ( Folien zu Theoretische Informatik, Uni Mannheim ( ) Wikipedia (Regulärer Ausdruck, CYK-Algorithmus) TopCoder Forums ( Theoretische Informatik, Ingo Wegener, Teubner Verlag, 3. Auflage, 2005 Python Dokumentation ( Hallo Welt für Fortgeschrittene Parsen Andreas Hammer Folie 80/80
Hallo Welt für Fortgeschrittene
Hallo Welt für Fortgeschrittene Parsen Andreas Ruprecht Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Inhalt Einführung Theoretische Grundlagen Grammatiken im Allgemeinen Die Chomsky-Hierarchie
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
MehrTheoretische 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
Mehrkontextfreie Grammatiken Theoretische Informatik kontextfreie Grammatiken kontextfreie Grammatiken Rainer Schrader 14. Juli 2009 Gliederung
Theoretische Informatik Rainer Schrader Zentrum für Angewandte Informatik Köln 14. Juli 2009 1 / 40 2 / 40 Beispiele: Aus den bisher gemachten Überlegungen ergibt sich: aus der Chomsky-Hierarchie bleiben
MehrGrundlagen der Theoretischen Informatik
Grundlagen der Theoretischen Informatik Sommersemester 2015 22.04.2015 Viorica Sofronie-Stokkermans e-mail: sofronie@uni-koblenz.de 1 Bis jetzt 1. Terminologie 2. Endliche Automaten und reguläre Sprachen
MehrKapitel: Die Chomsky Hierarchie. Die Chomsky Hierarchie 1 / 14
Kapitel: Die Chomsky Hierarchie Die Chomsky Hierarchie 1 / 14 Allgemeine Grammatiken Definition Eine Grammatik G = (Σ, V, S, P) besteht aus: einem endlichen Alphabet Σ, einer endlichen Menge V von Variablen
MehrAlphabet, formale Sprache
n Alphabet Alphabet, formale Sprache l nichtleere endliche Menge von Zeichen ( Buchstaben, Symbole) n Wort über einem Alphabet l endliche Folge von Buchstaben, die auch leer sein kann ( ε leere Wort) l
MehrEinstieg in die Informatik mit Java
1 / 17 Einstieg in die Informatik mit Java String Tokenizer Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 17 1 Überblick Tokenizer 2 StringTokenizer 3 Verwendung von String.split
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
MehrGI Vektoren
Vektoren Problem: Beispiel: viele Variablen vom gleichen Typ abspeichern Text ( = viele char-variablen), Ergebnisse einer Meßreihe ( = viele int-variablen) hierfür: Vektoren ( = Arrays = Feld ) = Ansammlung
MehrGrundbegriffe. Grammatiken
Grammatiken Grammatiken in der Informatik sind ähnlich wie Grammatiken für natürliche Sprachen ein Mittel, um alle syntaktisch korrekten Sätze (hier: Wörter) einer Sprache zu erzeugen. Beispiel: Eine vereinfachte
MehrBeschreibungskomplexität von Grammatiken Definitionen
Beschreibungskomplexität von Grammatiken Definitionen Für eine Grammatik G = (N, T, P, S) führen wir die folgenden drei Komplexitätsmaße ein: Var(G) = #(N), Prod(G) = #(P ), Symb(G) = ( α + β + 1). α β
MehrGrammatik Prüfung möglich, ob eine Zeichenfolge zur Sprache gehört oder nicht
Zusammenhang: Formale Sprache Grammatik Formale Sprache kann durch Grammatik beschrieben werden. Zur Sprache L = L(G) gehören nur diejenigen Kombinationen der Zeichen des Eingabealphabets, die durch die
MehrTheorie der Informatik. Theorie der Informatik. 6.1 Einführung. 6.2 Alphabete und formale Sprachen. 6.3 Grammatiken. 6.4 Chomsky-Hierarchie
Theorie der Informatik 17. März 2014 6. Formale Sprachen und Grammatiken Theorie der Informatik 6. Formale Sprachen und Grammatiken Malte Helmert Gabriele Röger Universität Basel 17. März 2014 6.1 Einführung
MehrGrundlagen der Theoretischen Informatik
Grundlagen der Theoretischen Informatik Sommersemester 2015 23.04.2015 Viorica Sofronie-Stokkermans e-mail: sofronie@uni-koblenz.de 1 Bis jetzt 1. Terminologie 2. Endliche Automaten und reguläre Sprachen
MehrProgrammierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder
Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Tutoraufgabe 1 (Syntax und Semantik): 1. Was ist Syntax? Was ist Semantik? Erläutern Sie den Unterschied. 2.
MehrString s1, s2; Eine Zuweisung geschieht am einfachsten direkt durch Angabe des Strings eingeschlossen in doppelte Hochkommata:
Informatik mit Java: Gierhardt Zeichenketten bzw. Strings Der Datentyp String Zeichenketten bzw. Strings sind eine häufig benutzte Datenstruktur. Man könnte auch mit Arrays aus Zeichen arbeiten. Da aber
MehrKapitel 2: Formale Sprachen Gliederung. 0. Grundbegriffe 1. Endliche Automaten 2. Formale Sprachen 3. Berechnungstheorie 4. Komplexitätstheorie
Gliederung 0. Grundbegriffe 1. Endliche Automaten 2. Formale Sprachen 3. Berechnungstheorie 4. Komplexitätstheorie 2.1. 2.2. Reguläre Sprachen 2.3. Kontextfreie Sprachen 2/1, Folie 1 2015 Prof. Steffen
MehrAlgorithmen mit konstantem Platzbedarf: Die Klasse REG
Algorithmen mit konstantem Platzbedarf: Die Klasse REG Sommerakademie Rot an der Rot AG 1 Wieviel Platz brauchen Algorithmen wirklich? Daniel Alm Institut für Numerische Simulation Universität Bonn August
MehrGrundlagen der Informatik II
Grundlagen der Informatik II Dr.-Ing. Sven Hellbach S. Hellbach Grundlagen der Informatik II Abbildungen entnommen aus: Dirk W. Hoffmann: Theoretische Informatik; Hanser Verlag 2011, ISBN: 978-3-446-42854-6
MehrGrammatiken. Eine Grammatik G mit Alphabet Σ besteht aus: Variablen V. Startsymbol S V. Kurzschreibweise G = (V, Σ, P, S)
Grammatiken Eine Grammatik G mit Alphabet Σ besteht aus: Variablen V Startsymbol S V Produktionen P ( (V Σ) \ Σ ) (V Σ) Kurzschreibweise G = (V, Σ, P, S) Schreibweise für Produktion (α, β) P: α β 67 /
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
MehrSyntax von Programmiersprachen
"Grammatik, die sogar Könige zu kontrollieren weiß... aus Molière, Les Femmes Savantes (1672), 2. Akt Syntax von Programmiersprachen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang WS 07/08
MehrDer Datentyp String. Stringvariable und -vergleiche
Informatik 12 mit Java: Gierhardt Zeichenketten bzw. Strings Der Datentyp String Zeichenketten bzw. Strings sind eine häufig benutzte Datenstruktur. Man könnte auch mit Arrays aus Zeichen arbeiten. Da
MehrThomas Behr. 17. November 2011
in in Fakultät für Mathematik und Informatik Datenbanksysteme für neue Anwendungen FernUniversität in Hagen 17. November 2011 c 2011 FernUniversität in Hagen Outline in 1 2 3 4 5 6 - Was ist das? in über
MehrFachseminar Compilerbau
Fachseminar Compilerbau WS 08/09 Matthias Schiller Syntaktische Analyse 1. Prinzip der Top-Down-Analyse 2. LL(1)-Grammatiken Modell-Vorstellung Der Scanner liefert als Ergebnis der lexikalischen Analyse,
MehrFormale Sprachen. Script, Kapitel 4. Grammatiken
Formale Sprachen Grammatiken Script, Kapitel 4 erzeugen Sprachen eingeführt von Chomsky zur Beschreibung natürlicher Sprache bedeutend für die Syntaxdefinition und -analyse von Programmiersprachen Automaten
MehrHEUTE. Unterschiede Pseudocode / Programmcode. Rundung und modulo (Tafel) Pseudocode: findprimeswithdifference. Strings in JAVA.
15.11.06 1 HEUTE 15.11.06 3 Unterschiede Pseudocode / Programmcode Rundung und modulo (Tafel) Pseudocode: findprimeswithdifference Strings in JAVA Pseudocode: kontextfrei Variablentyp passend Schleifen
Mehr7. Formale Sprachen und Grammatiken
7. Formale Sprachen und Grammatiken Computer verwenden zur Verarbeitung von Daten und Informationen künstliche, formale Sprachen (Maschinenspr., Assemblerspachen, Programmierspr., Datenbankspr., Wissensrepräsentationsspr.,...)
MehrInformatik B von Adrian Neumann
Musterlösung zum 7. Aufgabenblatt vom Montag, den 25. Mai 2009 zur Vorlesung Informatik B von Adrian Neumann 1. Java I Schreiben Sie ein Java Programm, das alle positiven ganzen Zahlen 0 < a < b < 1000
MehrGrundlagen der Theoretischen Informatik
Grundlagen der Theoretischen Informatik Sommersemester 2016 20.04.2016 Viorica Sofronie-Stokkermans e-mail: sofronie@uni-koblenz.de 1 Bis jetzt 1. Terminologie 2. Endliche Automaten und reguläre Sprachen
MehrWerkzeuge zur Programmentwicklung
Werkzeuge zur Programmentwicklung B-15 Bibliothek Modulschnittstellen vorübersetzte Module Eingabe Editor Übersetzer (Compiler) Binder (Linker) Rechner mit Systemsoftware Quellmodul (Source) Zielmodul
MehrEinführung in die Informatik Grammars & Parsers
Einführung in die Informatik Grammars & Parsers Grammatiken, Parsen von Texten Wolfram Burgard Cyrill Stachniss 12.1 Einleitung Wir haben in den vorangehenden Kapiteln meistens vollständige Java- Programme
MehrPrimitive Datentypen
Primitive Datentypen 2 Arten von Datentypen: primitive Datentypen (heute) Objekte (später) Java ist streng typisiert, d.h. für jede Variable muß angegeben werden was für eine Art von Wert sie aufnimmt.
MehrGrammatiken und ANTLR
Grammatiken und ANTLR Zusatzfolien zu Algo Blatt 6 Author: Henry Schaefer http://www.majeeks.de/folien_blatt6.pdf Grammatik Definition: syntaktische Beschreibung einer Sprache (H.S.) Definiton Grammatik
MehrInhalt Streams Eingabe / Ausgbe in C Dateizugriff in C Eingabe / Ausgabe in C++ Dateizugriff in C++ Error Handling
Input / Output in C, C++ Inhalt Streams Eingabe / Ausgbe in C Dateizugriff in C Eingabe / Ausgabe in C++ Dateizugriff in C++ Error Handling Page 1 Ausgaben in C,C++ - generell Fuer C basierte Ausgaben:
Mehr3. Grundlegende Sprachkonstruktionen imperativer Programme
3. Grundlegende Sprachkonstruktionen imperativer Programme Java-Beispiele: Temperature.java Keyboard.java K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Version: 4. Nov. 2015 2 Schwerpunkte
MehrDeterministischer Kellerautomat (DPDA)
Deterministische Kellerautomaten Deterministischer Kellerautomat (DPDA) Definition Ein Septupel M = (Σ,Γ, Z,δ, z 0,#, F) heißt deterministischer Kellerautomat (kurz DPDA), falls gilt: 1 M = (Σ,Γ, Z,δ,
MehrEinstieg in die Informatik mit Java
Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form
MehrTutoraufgabe 1 (ɛ-produktionen):
Prof aa Dr J Giesl Formale Systeme, Automaten, Prozesse SS 2010 M Brockschmidt, F Emmes, C Fuhs, C Otto, T Ströder Hinweise: Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus dem gleichen Tutorium
MehrEinführung in die Programmierung 1
Einführung in die Programmierung 1 Einführung (S.2) Einrichten von Eclipse (S.4) Mein Erstes Programm (S.5) Hallo Welt!? Programm Der Mensch (S.11) Klassen (S.12) Einführung Wie Funktioniert Code? Geschriebener
MehrProbeklausur: Programmierung WS04/05
Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,
MehrBeispiel: Temperaturumwandlung. Imperative Programmierung. Schwerpunkte. 3. Grundlegende Sprachkonstruktionen imperativer Programme
Schwerpunkte 3. Grundlegende Sprachkonstruktionen imperativer Programme Java-Beispiele: Temperature.java Keyboard.java Imperative Programmierung Beispiel für ein Programm aus drei Komponenten Variable,
MehrLemma Für jede monotone Grammatik G gibt es eine kontextsensitive
Lemma Für jede monotone Grammatik G gibt es eine kontextsensitive Grammatik G mit L(G) = L(G ). Beweis im Beispiel (2.): G = (V,Σ, P, S) : P = {S asbc, S abc, CB BC, ab ab, bb bb, bc bc, cc cc}. (i) G
MehrCS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)
CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik) Einfache Programme: Programm-Argument, Bedingte Anweisungen, Switch, Enum Boolesche Werte und Ausdrücke Seite 1 Beispiel: Umrechnen
MehrTutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2
Prof. aa Dr. J. Giesl Programmierung WS16/17 F. Frohn, J. Hensel, D. Korzeniewski Tutoraufgabe 1 (Zweierkomplement): a) Sei x eine ganze Zahl. Wie unterscheiden sich die Zweierkomplement-Darstellungen
Mehr1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.
1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik
MehrTheoretische Informatik. Reguläre Sprachen und Automaten
Theoretische Informatik Reguläre Sprachen und Automaten Reguläre Sprachen Reguläre Ausdrücke und Sprachen Gleichungen Syntaxdiagramme Erweiterungen Anwendungen Reguläre Ausdrücke über Σ Syntax: Konstante
MehrFORMALE SYSTEME. Sprachen beschreiben. Wiederholung. Wie kann man Sprachen beschreiben? 2. Vorlesung: Grammatiken und die Chomsky-Hierarchie
Wiederholung FORMALE SYSTEME 2. Vorlesung: Grammatiken und die Chomsky-Hierarchie Markus Krötzsch Formale Sprachen sind in Praxis und Theorie sehr wichtig Ein Alphabet ist eine nichtleere, endliche Menge
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
Mehr4.2 Die Chomsky Normalform
4.2 Die Chomsky Normalform Für algorithmische Problemstellungen (z.b. das Wortproblem) aber auch für den Nachweis von Eigenschaften kontextfreier Sprachen ist es angenehm, von CFG in Normalformen auszugehen.
MehrEinführung in die Programmierung mit VBA
Einführung in die Programmierung mit VBA Vorlesung vom 07. November 2016 Birger Krägelin Inhalt Vom Algorithmus zum Programm Programmiersprachen Programmieren mit VBA in Excel Datentypen und Variablen
MehrVU Software Paradigmen / SS 2014
VU Software Paradigmen 716.060 / SS 2014 Thorsten Ruprechter ruprechter@tugraz.at Institute for Software Technology 1 Organisatorisches Ausgabe: 25.03. (heute) Fragestunde: 22.04. Abgabe: 29.04 (ausgedruckt)
MehrFunktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Prof. Dr. Hans J. Schneider Lehrstuhl für Programmiersprachen und Programmiermethodik Friedrich-Alexander-Universität Erlangen-Nürnberg Sommersemester 2011 I. Die
MehrUmformung NTM DTM. Charakterisierung rek. aufz. Spr. Chomsky-3-Grammatiken (T5.3) Chomsky-0-Grammatik Rek. Aufz.
Chomsky-0-Grammatik Rek. Aufz. Satz T5.2.2: Wenn L durch eine Chomsky-0- Grammatik G beschrieben wird, gibt es eine NTM M, die L akzeptiert. Beweis: Algo von M: Schreibe S auf freie Spur. Iteriere: Führe
Mehr6 Kontextfreie Grammatiken
6 Kontextfreie Grammatiken Reguläre Grammatiken und damit auch reguläre Ausdrücke bzw. endliche Automaten haben bezüglich ihres Sprachumfangs Grenzen. Diese Grenzen resultieren aus den inschränkungen,
MehrAnwendung höherer Programmiersprachen. Formatierte Ausgabe mit cout. Angewandte Informatik I C / C++ Teil B: Formatierte Ein- und Ausgabe
Angewandte Informatik I Anwendung höherer Programmiersprachen C / C++ Vorlesung der FH Münster Prof. Dr.-Ing. H. Bösche // Programm b0301208 #include { int i = 1, j = 2; cout
MehrKapitel 4: Syntaxdiagramme und Grammatikregeln
4. Syntaxdiagramme und Grammatikregeln 4-1 Objektorientierte Programmierung (Winter 2006/2007) Kapitel 4: Syntaxdiagramme und Grammatikregeln Syntaxdiagramme Grammatikregeln (kontextfrei) Beispiele: Lexikalische
Mehr(Prüfungs-)Aufgaben zu formale Sprachen
(Prüfungs-)Aufgaben zu formale Sprachen (siehe auch bei den Aufgaben zu endlichen Automaten) 1) Eine Grammatik G sei gegeben durch: N = {S, A}, T = {a, b, c, d}, P = { (S, Sa), (S, ba), (A, ba), (A, c),
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 den Einsatz von Objekt-Orientierung mit C++ I
Einführung in den Einsatz von Objekt-Orientierung mit C++ I ADV-Seminar Leiter: Mag. Michael Hahsler Syntax von C++ Grundlagen Übersetzung Formale Syntaxüberprüfung Ausgabe/Eingabe Funktion main() Variablen
MehrEin Satz der deutschen Sprache besitzt ein Subjekt, ein Prädikat und ein Objekt (SPO).
1 Grammatiken Autor: Tilman Blumenbach Letzte Änderung: 28. Juni 2012 18:15 Ziel von Grammatiken Wollen die Struktur von Sprachen modellieren und charakterisieren. Beispiel Ein Satz der deutschen Sprache
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
MehrEmpfehlenswerte Referenzen
Wenn Google etwas nicht finden kann, fragen sie Jack Bauer. ("Fakten über Jack Bauer") Inhalt Empfehlenswerte Referenzen...1 0 Wozu reguläre Ausdrücke?...1 1 Die Elemente regulärer Ausdrücke...2 2 Ein
MehrProgrammier-Befehle - Woche 10
Funktionen Rekursion Selbstaufruf einer Funktion Jeder rekursive Funktionsaufruf hat seine eigenen, unabhängigen Variablen und Argumente. Dies kann man sich sehr gut anhand des in der Vorlesung gezeigten
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
MehrElementare Datentypen in C++
Elementare Datentypen in C++ bool signed/unsigned char signed/unsigned short int signed/unsigned int signed/unsigned long int (signed/unsigned long long int) float double long double void enum char Der
MehrErste Schritte der Programmierung in C
Erste Schritte der Programmierung in C C versus C++ Anatomie von C-Programmen für AVR- Mikrocontroller Unterschiede zwischen C++ und C 1 Grundlegende Unterschiede File-Extensions (Header und Quellcode)
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
MehrJava Einführung VARIABLEN und DATENTYPEN Kapitel 2
Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Inhalt dieser Einheit Variablen (Sinn und Aufgabe) Bezeichner Datentypen, Deklaration und Operationen Typenumwandlung (implizit/explizit) 2 Variablen
MehrTheoretische Informatik I (Grundzüge der Informatik I)
Theoretische Informatik I (Grundzüge der Informatik I) Literatur: Buch zur Vorlesung: Uwe Schöning, Theoretische Informatik - kurzgefasst. Spektrum Akademischer Verlag, Heidelberg/Berlin, 4. Auflage, 2001.
Mehr9 Theoretische Informatik und Compilerbau
9 Theoretische Informatik und Compilerbau Theoretische Informatik und Mathematik schaffen die Basis für viele der technischen Entwicklungen, die wir in diesem Buch besprechen. Die boolesche Algebra (S.
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
MehrElementare Konzepte von
Elementare Konzepte von Programmiersprachen Teil 1: Bezeichner, Elementare Datentypen, Variablen, Referenzen, Zuweisungen, Ausdrücke Kapitel 6.3 bis 6.7 in Küchlin/Weber: Einführung in die Informatik Bezeichner
Mehr1 Syntax von Programmiersprachen
1 Syntax von Programmiersprachen Syntax ( Lehre vom Satzbau ): formale Beschreibung des Aufbaus der Worte und Sätze, die zu einer Sprache gehören; im Falle einer Programmier-Sprache Festlegung, wie Programme
MehrRekursiv aufzählbare Sprachen
Kapitel 4 Rekursiv aufzählbare Sprachen 4.1 Grammatiken und die Chomsky-Hierarchie Durch Zulassung komplexer Ableitungsregeln können mit Grammatiken größere Klassen als die kontextfreien Sprachen beschrieben
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
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
MehrUniversität Karlsruhe (TH)
Universität Karlsruhe (TH) Lehrstuhl für Programmierparadigmen prachtechnologie und Compiler W 2008/2009 http://pp.info.uni-karlsruhe.de/ Dozent: Prof. Dr.-Ing. G. nelting snelting@ipd.info.uni-karlsruhe.de
MehrFormale Sprachen. Grammatiken und die Chomsky-Hierarchie. Rudolf FREUND, Marian KOGLER
Formale Sprachen Grammatiken und die Chomsky-Hierarchie Rudolf FREUND, Marian KOGLER Grammatiken Das fundamentale Modell zur Beschreibung von formalen Sprachen durch Erzeugungsmechanismen sind Grammatiken.
MehrDie Programmiersprache C Eine Einführung
Die Programmiersprache C Eine Einführung Christian Gentsch Fakutltät IV Technische Universität Berlin Projektlabor 2. Mai 2014 Inhaltsverzeichnis 1 Einführung Entstehungsgeschichte Verwendung 2 Objektorientiert
MehrProgrammierung und Modellierung
Programmierung und Modellierung Terme, Suchbäume und Pattern Matching Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 7 Benutzerdefinierte Datentypen 7. Binärer Suchbaum 8. Anwendung:
Mehr3. Nur die mit diesen Regeln erzeugten Ausdrücke sind reguläre Ausdrücke über Σ.
H O C H S C H U L E University of Applied Sciences ZITTAU/GÖRLITZ Fachbereich Informatik Prof. Dr. Christian Wagenknecht Formale Sprachen und Automaten Übung: Reguläre Ausdrücke Zur Erinnerung: Reguläre
MehrEinführung in die Theoretische Informatik
Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Dr. Werner Meixner, Dr. Alexander Krauss Sommersemester 2010 Lösungsblatt 7 15. Juni 2010 Einführung in die Theoretische
MehrWelche Informatik-Kenntnisse bringen Sie mit?
Welche Informatik-Kenntnisse bringen Sie mit? So gehen Sie vor! Lösen Sie die Aufgaben der Reihe nach von 1 bis 20, ohne das Lösungsblatt zur Hilfe zu nehmen. Der Schwierigkeitsgrad der Aufgaben nimmt
MehrTheoretische Informatik Mitschrift
Theoretische Informatik Mitschrift 2. Grammatiken und die Chomsky-Hierarchie Beispiel: Syntaxdefinition in BNF :=
MehrInformatik I. Übung 2 : Programmieren in Eclipse. 5. März Daniel Hentzen
Informatik I Übung 2 : Programmieren in Eclipse 5. März 2014 Daniel Hentzen dhentzen@student.ethz.ch Downloads : http://n.ethz.ch/~dhentzen/download/ Heute 1. Nachbesprechung Übung 1 2. Theorie 3. Vorbesprechung
MehrRepetitorium Informatik (Java)
Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen
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?
MehrEinführung in die STL
1/29 in die STL Florian Adamsky, B. Sc. (PhD cand.) florian.adamsky@iem.thm.de http://florian.adamsky.it/ cbd Softwareentwicklung im WS 2014/15 2/29 Outline 1 3/29 Inhaltsverzeichnis 1 4/29 Typisierung
MehrReguläre Ausdrücke. Felix Döring, Felix Wittwer 14. November Python-Kurs
Reguläre Ausdrücke Felix Döring, Felix Wittwer 14. November 2016 Python-Kurs Gliederung 1. Grundlagen 2. Matching Regeln Sonderzeichen Zusammengesetzte Regex Spezielle Sequenzen 3. Methoden 4. reqular
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
MehrTheoretische Informatik. Grammatiken. Grammatiken. Grammatiken. Rainer Schrader. 9. Juli 2009
Theoretische Informatik Rainer Schrader Institut für Informatik 9. Juli 2009 1 / 41 2 / 41 Gliederung die Chomsky-Hierarchie Typ 0- Typ 3- Typ 1- Die Programmierung eines Rechners in einer höheren Programmiersprache
MehrWas bisher geschah: Formale Sprachen
Was bisher geschah: Formale Sprachen Alphabet, Wort, Sprache Operationen und Relationen auf Wörtern und Sprachen Darstellung unendlicher Sprachen durch reguläre Ausdrücke (Syntax, Semantik, Äquivalenz)
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
MehrJAVA-Datentypen und deren Wertebereich
Folge 8 Variablen & Operatoren JAVA 8.1 Variablen JAVA nutzt zum Ablegen (Zwischenspeichern) von Daten Variablen. (Dies funktioniert wie beim Taschenrechner. Dort können Sie mit der Taste eine Zahl zwischenspeichern).
MehrKurze Einführung in die Programmiersprache C++ und in Root
Kurze Einführung in die Programmiersprache C++ und in Root Statistik, Datenanalyse und Simulation; 31.10.2006 Inhalt 1 Einführung in die Programmiersprache C++ Allgemeines Variablen Funktionen 2 1 Einführung
MehrKlassen in Java. Grundlagen der Programmierung. Stephan Kleuker 68
Klassen in Java Stephan Kleuker 68 Klassen in Java (Syntax) (1/3) class Datum { int tag; int monat; int jahr; } Java hat Schlüsselworte (z. B. class), diese dürfen z. B. nicht als Variablennamen genutzt
MehrInhalt Kapitel 5: Syntax
Inhalt Kapitel 5: Syntax 1 Syntax und Semantik 2 Formale Sprachen 3 Backus-Naur Form 4 Chomsky Grammatik 5 Reguläre Ausdrücke 6 Endliche Automaten 180 Syntax und Semantik Syntax Syntax: Festlegung des
Mehr