Wiederholung. Ein deterministischer endlicher Automat (DEA) über einem Alphabet A besteht aus: einer endlichen Menge von Zuständen Q,

Ähnliche Dokumente
Reguläre Sprachen und endliche Automaten

Beispiel. Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio)

Induktive Definition

Reguläre Ausdrücke. Michael Jäger. 4. April 2017

1 Eliminieren von ɛ-übergängen

Formale Sprachen und Automaten

Formale Sprachen und endliche Automaten

Theoretische Informatik. Reguläre Sprachen und Automaten

Deterministische endliche Automaten - Wiederholung

Formale Systeme. Endliche Automaten. Prof. Dr. Bernhard Beckert WS 2009/2010 KIT INSTITUT FÜR THEORETISCHE INFORMATIK

Das Pumping-Lemma Formulierung

Formale Systeme Prof. Dr. Bernhard Beckert, WS 2016/2017

Formale Systeme. Endliche Automaten. Prof. Dr. Bernhard Beckert, WS 2015/ KIT I NSTITUT F U R T HEORETISCHE I NFORMATIK

Lexikalische Analyse, Tokenizer, Scanner

Elementare Unix-Befehle 11

Grundlagen der theoretischen Informatik

Automaten und Formale Sprachen SoSe 2007 in Trier. Henning Fernau Universität Trier

Thomas Behr. 17. November 2011

4. Die lexikalische Analyse

Reguläre Sprachen. R. Stiebe: Theoretische Informatik für ING-IF und Lehrer,

Regular Expressions. Daniel Lutz Was ist eine Regular Expression?

Algorithmen mit konstantem Platzbedarf: Die Klasse REG

Berechenbarkeitstheorie 1. Vorlesung

3.0 VU Formale Modellierung

Theoretische Grundlagen der Informatik

Satz von Kleene. (Stephen C. Kleene, ) Wiebke Petersen Einführung CL 2

Endliche Automaten, reguläre Ausdrücke, rechtslineare Grammatiken

3 Regular expressions

Die mathematische Seite

Software Engineering Ergänzung zur Vorlesung

DisMod-Repetitorium Tag 4

Theoretische Grundlagen der Informatik

Theoretische Grundlagen des Software Engineering

Grenzen der Regularität

Grammatiken. Eine Grammatik G mit Alphabet Σ besteht aus: Variablen V. Startsymbol S V. Kurzschreibweise G = (V, Σ, P, S)

Informatik III. Christian Schindelhauer Wintersemester 2006/07 3. Vorlesung

THIA - Übungsblatt 2.

Ein deterministischer endlicher Automat (DFA) kann als 5-Touple dargestellt werden:

Lexikalische Programmanalyse der Scanner

Formale Sprachen und Automaten

Automaten und Formale Sprachen SoSe 2013 in Trier

Satz (Abschluß unter der Stern-Operation)

Theoretische Grundlagen der Informatik. Vorlesung am 02. November INSTITUT FÜR THEORETISCHE INFORMATIK

1. Übungsblatt 6.0 VU Theoretische Informatik und Logik

4. Übung zur Vorlesung Informatik III am

Grundlagen der Theoretischen Informatik

Sei Σ ein endliches Alphabet. Eine Sprache L Σ ist genau dann regulär, wenn sie von einem regulären Ausdruck beschrieben werden kann.

Automaten und Formale Sprachen SoSe 2013 in Trier

Einführung in die Computerlinguistik Satz von Kleene

Linux II. Reguläre Ausdrücke Editoren Scripting. 2 Linux II. Linux I II III Res WN/TT NLTK XML Weka E Reguläre Ausdrücke Editoren Scripting

Theoretische Grundlagen des Software Engineering

Grundlagen der Informatik II

11.1 Kontextsensitive und allgemeine Grammatiken

Formale Methoden 1. Gerhard Jäger 16. Januar Uni Bielefeld, WS 2007/2008 1/19

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie

Homomorphismen. Defnition: Σ und Γ seien zwei endliche Alphabete, und h sei eine Abbildung h : Σ Γ. Wir definieren die folgenden Sprachen:

Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester 2013

Einführung in die Computerlinguistik deterministische und nichtdeterministische endliche Automaten

Übungen zur Vorlesung Modellierung WS 2003/2004 Blatt 11 Musterlösungen

Gegenstand der Vorlesung 1

Linux I II III Res/Pro WN/TT Reguläre Ausdrücke Editoren Scripting. Linux II. 2 Linux II. Reguläre Ausdrücke Editoren Scripting. Ressourcen-Vorkurs

Einführung in die Computerlinguistik Satz von Kleene

Einführung in die Theoretische Informatik

Proseminar UNIX Tools. Ferdinand Beyer

Rekursiv aufzählbare Sprachen

Theoretische Informatik für Medieninformatiker

Sebastian Harl. 03. Oktober 2008

Theoretische Grundlagen der Informatik

Webengineering. Reguläre Ausdrücke. Dienstag, 2. Juli 13

Endliche Automaten Jörg Roth 101

Definition (Reguläre Ausdrücke) Sei Σ ein Alphabet, dann gilt: (ii) ε ist ein regulärer Ausdruck über Σ.

6 F O R M A L E S P R A C H E N. 6.1 formale sprachen

FORMALE SYSTEME. 3. Vorlesung: Endliche Automaten. TU Dresden, 17. Oktober Markus Krötzsch

Ogden s Lemma: Der Beweis (1/5)

Theoretische Informatik und Logik Übungsblatt 1 (2016S) Lösung

Beispiel Produktautomat

Seien M 1,M 2 NFAs f. die Sprachen L 1 und L 2. Konstruktion eines NFAs für L 1 L 2 : Erzeuge Kopien von M 1 und M 2. p 1

2. Gegeben sei folgender nichtdeterministischer endlicher Automat mit ɛ-übergängen:

Grundlagen der Theoretischen Informatik

1 Lokale Sprachen. 2 Verallgemeinerung

Was bisher geschah. Modellierung von Aussagen durch Logiken. Modellierung von Daten durch Mengen

Grundlagen der Theoretischen Informatik / Einführung in die Theoretische Informatik I

Proseminar Automatentheorie. Thema: Berry Sethi Algorithmus. Von Christopher Haas

Reguläre Ausdrücke. Felix Döring, Felix Wittwer 14. November Python-Kurs

Turingmaschinen Vorlesung Berechenbarkeit und Komplexität alias Theoretische Informatik: Komplexitätstheorie und effiziente Algorithmen

Theorie der Informatik

Automatentheorie und formale Sprachen

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

Finite-State Technology

Diskrete Mathematik. Arne Dür Kurt Girstmair Simon Legner Georg Moser Harald Zankl

Alphabet, formale Sprache

Diskrete Mathematik. Anna-Lena Rädler Christina Kohl Georg Moser Christian Sternagel Vincent van Oostrom

Automatentheorie und formale Sprachen

3. Vorlesung: Endliche Automaten Markus Kr otzsch Lehrstuhl Wissensbasierte Systeme

Beweisidee: 1 Verwende den Keller zur Simulation der Grammatik. Leite ein Wort. 2 Problem: der Keller darf nicht beliebig verwendet werden, man kann

Einführung in die Theoretische Informatik

Transkript:

Wiederholung Ein deterministischer endlicher Automat (DEA) über einem Alphabet A besteht aus: einer endlichen Menge von Zuständen Q, einem Anfangszustand q 0 Q, einer Menge von Endzuständen Q E Q, einer Übergangsfunktion δ : Q A Q. 1

Wiederholung Ein DEA beginnt im Anfangszustand q 0. Er liest die Zeichen des Wortes sequentiell von vorn nach hinten. Wenn sich der Automat in einem Zustand q befindet und ein Zeichen x liest, geht er in den Zustand δ(q, x) über. Wenn er sich am Wortende in einem Zustand aus Q E akzeptiert er das Wort. befindet, Die Menge aller Wörter, die ein Automat akzeptiert, ist die von diesem Automaten akzeptierte Sprache. 2

Wiederholung Nichtdeterministischer endlicher Automat (NEA): Verallgemeinerung deterministischer endlicher Automaten: Statt Übergangsfunktion: Übergangsrelation, d. h.: für einen Zustand q und ein Zeichen x kann es einen, mehrere, oder auch keinen Folgezustand geben. Zusätzlich möglich: ε-übergänge, d. h.: der Automat wechselt von einem Zustand in einen anderen, ohne ein Zeichen zu lesen. 3

Wiederholung Definition: Ein NEA akzeptiert ein Wort, wenn es mindestens eine Möglichkeit gibt, das Wort vollständig zu lesen und dabei vom Anfangs- in einen Endzustand zu gelangen. Satz: Für jede Sprache, die von einem NEA akzeptiert wird, existiert auch ein DEA, der sie akzeptiert. (Die Umkehrung ist trivial, denn jeder DEA ist ein NEA.) 4

Wiederholung Eine Sprache L heißt regulär, wenn es einen DEA (oder NEA) gibt, der L akzeptiert. Beispiele für nicht-reguläre Sprachen: { a n b n n 0 }. Menge aller korrekt geklammerten Wörter über dem Alphabet {(, )}: Grund: Endliche Automaten können nicht beliebig weit zählen. 5

Wiederholung Reguläre Sprachen sind unter vielen Operationen abgeschlossen: Wenn L eine reguläre Sprache ist, dann sind ebenfalls regulär: das Komplement A \ L, der Abschluß L und der nichtleere Abschluß L +. Wenn L 1 und L 2 reguläre Sprachen sind, dann sind ebenfalls regulär: der Durchschnitt L 1 L 2, die Vereinigung L 1 L 2, und die Konkatenation L 1 L 2. 6

Reguläre Ausdrücke Sei A ein Alphabet. Wir bezeichnen, {ε} und {x} (für jedes x A) als Grundsprachen. Wir bezeichnen die Operationen Vereinigung (L 1 L 2 ), Konkatenation (L 1 L 2 ) und Abschluß (L ) als reguläre Operationen. Satz: Eine Sprache ist genau dann regulär, wenn sie sich aus den Grundsprachen mittels der regulären Operationen aufbauen läßt. Beweis: ( ) Die Grundsprachen sind regulär, die regulären Operationen erhalten die Regularität. ( ) Sehr technisch. 7

Reguläre Ausdrücke Reguläre Ausdrücke beschreiben den Aufbau einer Sprache aus Grundsprachen mittels regulärer Operationen: Das Symbol ist ein regulärer Ausdruck, der die leere Menge beschreibt. Das Symbol ε ist ein regulärer Ausdruck, der die Sprache {ε} beschreibt, die nur aus dem leeren Wort besteht. Wenn x ein Zeichen aus A ist, dann ist x ein regulärer Ausdruck, der die Sprache {x} beschreibt, die nur aus dem Wort x besteht. 8

Reguläre Ausdrücke Wenn r 1 und r 2 reguläre Ausdrücke sind, die die Sprachen L 1 und L 2 beschreiben, dann ist r 1 r 2 ein regulärer Ausdruck, der die Sprache L 1 L 2 beschreibt, und r 1 r 2 ist ein regulärer Ausdruck, der die Sprache L 1 L 2 beschreibt. Wenn r ein regulärer Ausdruck ist, der die Sprache L beschreibt, dann ist r ein regulärer Ausdruck, der die Sprache L beschreibt. Zusätzlich: Klammern nach Bedarf. 9

Reguläre Ausdrücke Beispiele: Der reguläre Ausdruck a(b c) beschreibt die Sprache {ab, ac}. Auch der reguläre Ausdruck ab ac beschreibt diese Sprache. Der reguläre Ausdruck ab beschreibt die Sprache {a, ab, abb, abbb,...}. Der reguläre Ausdruck (ab) beschreibt die Sprache {ε, ab, abab, ababab,...}. 10

Reguläre Ausdrücke Die folgenden Eigenschaften sind äquivalent: Die Sprache L ist regulär. Es existiert ein DEA D, derl akzeptiert. Es existiert ein NEA N, derl akzeptiert. L läßt sich aus den Grundsprachen mittels der regulären Operationen aufbauen. Es existiert ein regulärer Ausdruck r, derl beschreibt. 11

Reguläre Ausdrücke Die verschiedenen Darstellungen von L lassen sich automatisch mittels eines Programms ineinander umrechnen. In der Praxis: Benutzer spezifiziert L mittels regulärem Ausdruck r; Programm konvertiert r in DEA oder NEA und untersucht einen gegebenen Text mit diesem Automaten. 12

Reguläre Ausdrücke in der Praxis Wo findet man reguläre Ausdrücke? Programmiersprachen: eingebaut: Perl, Python, AWK, sed. als zusätzliches Package: Java (z. B.: org.apache.regexp, org.apache.oro.text.regex, gnu.regexp) Suchprogramme: z. B. grep. Editoren: z. B. alle emacs- und vi-artigen Editoren. Pager: z. B. less, more. Scannergeneratoren: z. B. lex, flex, JLex. 13

Reguläre Ausdrücke in der Praxis Reguläre Ausdrücke, wie sie in praktischen Implementierungen verwendet werden, unterscheiden sich in einigen Punkten von der theoretischen Definition. 14

Reguläre Ausdrücke in der Praxis Problem 1: In der Theorie: Sprache besteht aus Wörtern über einem beliebigen endlichen Alphabet A; reguläre Ausdrücke verwenden zusätzliche Zeichen, ε,,,(...), die nicht in A enthalten sind (sogenannte Meta-Zeichen). In der Praxis: A = ASCII oder ISO-8859-n oder UNICODE; zur Darstellung regulärer Ausdrücke stehen keine neuen, bisher ungenutzen Zeichen zur Verfügung. 15

Reguläre Ausdrücke in der Praxis Ausweg: Bestimmte Zeichen aus A werden sowohl als normale als auch als Meta-Zeichen verwendet; zur Unterscheidung wird in einem der beiden Fälle ein Fluchtsymbol davorgesetzt (gewöhnlich \ ). Beispiel: a* bezeichnet die Sprache {ε, a, aa, aaa,...}. a\* bezeichnet die Sprache {a*}. 16

Reguläre Ausdrücke in der Praxis Problem 2: In der Theorie: Die Sprache, die aus den Kleinbuchstaben von a bis z besteht, wird durch den regulären Ausdruck (a b c d e f g h i j k l m n o p q r s t u v w x y z) beschrieben. In der Praxis: Abkürzungen sind unbedingt notwendig. 17

Reguläre Ausdrücke in der Praxis Abkürzungen:. ein beliebiges Zeichen [aeiou] eines der Zeichen a, e, i, o, u. [a-dmx-z] eines der Zeichen a, b, c, d, m, x, y, z. [^aeiou] ein beliebiges Zeichen außer a, e, i, o, u. [^a-dmx-z] ein beliebiges Zeichen außer a, b, c, d, m, x, y, z. 18

Reguläre Ausdrücke in der Praxis Problem 3: In der Theorie: Gegeben: ein Wort w, einregulärer Ausdruck r. Frage: Ist w in der durch r definierten Sprache enthalten? ( Paßt der reguläre Ausdruck r auf w? Matcht der reguläre Ausdruck r das Wort w? ) In der Praxis: Häufig lautet die Frage: sind irgendwelche Teilwörter von w in der durch r definierten Sprache enthalten? (Und wenn ja: welche Teilwörter?) 19

Reguläre Ausdrücke in der Praxis Konvention: Normalerweise wird untersucht, ob ein regulärer Ausdruck auf ein Teilwort des untersuchten Wortes paßt. Für den Fall, daß man das nicht will, gibt es zwei Sonderzeichen: ^ vor dem regulären Ausdruck: paßt nur am Anfang des Wortes (d. h. meist: der Zeile) $ nach dem regulären Ausdruck: paßt nur am Ende des Wortes (d. h. meist: der Zeile) 20

Reguläre Ausdrücke in der Praxis Beispiel: ab ^ab ab$ ^ab$ paßt auf ab, abccc, cccab, cccabccc. paßt auf ab, abccc. paßt auf ab, cccab. paßt auf ab. 21

Zusammengefaßt Die Implementierungen regulärer Ausdrücke in verschiedenen Programmen oder Programmiersprachen sind leider nicht einheitlich. Wir verwenden im folgenden die Syntax der Programmiersprache Perl. Andere Implementierungen weichen davon teilweise ab. In Perl gilt folgende Konvention: Alphanumerische Zeichen ohne \ stehen für sich selbst. Nicht-alphanumerische Zeichen mit \ stehen für sich selbst. Die anderen Kombinationen haben möglicherweise eine Meta-Bedeutung. (weiteres: man perlre) 22

Zusammengefaßt. ein beliebiges Zeichen [0-9A-F] [^0-9A-F] Zeichenklasse negierte Zeichenklasse Vereinigung/Alternative * Abschluß (vorstehender Ausdruck beliebig oft) + nichtleerer Abschluß (vorstehender Ausdruck mindestens einmal, A+ = AA*)? vorstehender Ausdruck ein- oder keinmal (A? = (A ) ) ^ Zeilenanfang $ Zeilenende (...) Klammern von Ausdrücken 23

Zusammengefaßt \t Tab \n Newline (LF) \r Return (CR) \w ein Wort -Zeichen (alphanumerisches Zeichen oder _) \s ein Whitespace-Zeichen (Leerzeichen, Tab, LF, CR) \d eine Ziffer \b eine Wort -Grenze (Anfang oder Ende einer Folge von \w-zeichen) 24

Zusammengefaßt Vorsicht: ac* paßt am Anfang von abc. a[^b] bedeutet nicht a nicht gefolgt von b. Die Schreibweise [^...] dient nur zur Negation von Zeichenklassen; man kann damit nicht beliebige reguläre Ausdrücke komplementiern. 25

Beispiel Beispiel: Analyse eines WWW-Logfiles. Die Einträge im Logfile eines WWW-Servers sehen wie folgt aus (eine Zeile!): isis.informatik.uni-kl.de - - [20/Mar/1998:02:21:31 +0100] \ "GET /~uwe/paper/aaecc94-bibl.html HTTP/1.0" 200 2201 Um herauszufinden, welche Postscript-Dateien (.ps) wann und von wo angefordert wurden, kann man den folgenden regulären Ausdruck benutzen: ".*\.ps Die vorletzte Zahl in der Zeile ist der Return-Code des Zugriffsversuchs. Return-Codes, die mit 4 anfangen, signalisieren Fehler. Man findet fehlgeschlagene Zugriffsversuche also mit dem regulären Ausdruck " 4 26

Wie paßt ein regulärer Ausdruck? Wie paßt ein regulärer Ausdruck auf einen String? ( Wie matcht der reguläre Ausdruck? ) Beispiel: Regulärer Ausdruck: ab* String: XXabYYabbZZ Der reguläre Ausdruck paßt auf das 3. Zeichen, das 3. und 4. Zeichen, das 7. Zeichen, das 7. und 8. Zeichen, das 7., 8. und 9. Zeichen. Wenn man einem Editor den Befehl gibt, ab* durch ein Leerzeichen zu ersetzen, welche Zeichen werden ersetzt? 27

Wie paßt ein regulärer Ausdruck? Übliche Konvention: Unter allen möglichen Matches, nimm die, die am frühesten anfangen. Nimm davon diejenigen Matches, bei denen der erste Teilausdruck am weitesten reicht. Nimm davon diejenigen Matches, bei denen der zweite Teilausdruck am weitesten reicht.... bis nur ein Match übrig bleibt. Beispiel: Regulärer Ausdruck: [abc]*b[abc]*c String: abcabaacaacaabaa 28

Suchen und Ersetzen Zugriff auf Teilausdrücke: Programme, die eine Suche-und-Ersetze-Funktion mit regulären Ausdrücken zur Verfügung stellen, erlauben es üblicherweise, in dem Ersetzungsstring auf Teile des gematchten Ausgangsstrings zuzugreifen. Wenn im Ersetzungsstring $1, $2,... auftreten, dann wird an dieser Stelle derjenige Teilstring eingesetzt, der vom ersten/zweiten/... geklammerten Teilausdruck gematcht wurde. 29

Suchen und Ersetzen Ersetzungsanweisung in Perl: s/.../.../; Ersetze einen String, der aus einer Folge von Nicht-Leerzeichen, einem Leerzeichen und einer weiteren Folge von Nicht-Leerzeichen besteht, durch die zweite Folge von Nicht-Leerzeichen, ein Komma und die erste Folge von Nicht-Leerzeichen: perl -pe s/([^ ]*) ([^ ]*)/$2,$1/; 30

Beispiel Beispiel: Analyse eines WWW-Logfiles. isis.informatik.uni-kl.de - - [20/Mar/1998:02:21:31 +0100] \ "GET /~uwe/paper/aaecc94-bibl.html HTTP/1.0" 200 2201 Wie kann man einfach ein WWW-Logfile nach der Toplevel-Domain (.de,.fr,.com,...) sortieren? Unter Unix steht ein Sortierprogramm (sort) zur Verfügung; aber der Teilstring, nach dem sortiert werden soll, ist für sort zu versteckt. Idee: Kopiere die Toplevel-Domain an den Anfang jeder Zeile: de isis.informatik.uni-kl.de - - [20/Mar/1998:02:21:31 +0100] \ "GET /~uwe/paper/aaecc94-bibl.html HTTP/1.0" 200 2201 Die Lösung: perl -pe s/([^ ]*)\.([^ ]*)/$2 $1.$2/; weblog sort 31

Beispiel Beispiel: Namensliste konvertieren (Karl Egon Meier Meier, Karl Egon). s/(.*) (.*)/$2, $1/; Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio) s/(.*) (.*)/$2, $1/; s/(.*) ([a-z]+ Ma?c D[aei] L[ae])$/$2 $1/; Tip: Daten vorher desinfizieren : s/\t/ /g; ## Tab -> Leerzeichen ## (g = global, d.h.: alle Vorkommen ersetzen) s/ +/ /g; ## beliebige Folge von Leerzeichen ## -> ein Leerzeichen s/^ //; ## Leerzeichen am Anfang löschen s/ $//; ## Leerzeichen am Ende löschen 32

Beispiel Beispiel: Erstes und zweites Argument einer Methode f(x,y,z) vertauschen. Problem: Um Aufrufe wie f(g(x,h(y)),z,w) richtig umformen zu können, müßte man Klammern zählen. Das geht mit regulären Ausdrücken nicht. Wir können aber immerhin vorher überprüfen, ob solche kritischen Fälle in der Datei auftauchen: Taucht eine öffnende Klammer vor dem ersten Komma nach f( auf? \bf\s*\([^(,]*\( Taucht eine öffnende Klammer zwischen dem ersten und dem zweiten Komma auf? \bf\s*\([^,]*,[^(,]*\( Wenn nein, dann funktioniert folgende Ersetzung: s/\bf\s*\(([^),]*),([^),]*)/f($2,$1/g; 33