Empfehlenswerte Referenzen

Ähnliche Dokumente
Formale Sprachen und Automaten

Übung Praktische Informatik I

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

Alphabet, formale Sprache

Theoretische Informatik. Reguläre Sprachen und Automaten

Daten und Algorithmen

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

Einführung in die Programmierung für NF. Übung

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme

Grundlagen der Theoretischen Informatik

Kapitel 2: Formale Sprachen Gliederung. 0. Grundbegriffe 1. Endliche Automaten 2. Formale Sprachen 3. Berechnungstheorie 4. Komplexitätstheorie

Theorie der Informatik. Theorie der Informatik. 6.1 Einführung. 6.2 Alphabete und formale Sprachen. 6.3 Grammatiken. 6.4 Chomsky-Hierarchie

Kapitel 5: Syntaxdiagramme und Grammatikregeln

Einführung in die Theoretische Informatik

Grundlagen der Theoretischen Informatik

Theoretische Informatik 2 bzw. Formale Sprachen und Berechenbarkeit. Sommersemester Herzlich willkommen!

THIA - Übungsblatt 2.

3 Regular expressions

Advertizor Version 1.1 Formatbeschreibung der Import-Schnittstellen

Adventure-Problem. Vorlesung Automaten und Formale Sprachen Sommersemester Adventure-Problem

Formale Sprachen. Inhaltsverzeichnis. M. Jakob. 10. Dezember Allgemeine Einführung. Aufbau formaler Sprachen

Algorithmen mit konstantem Platzbedarf: Die Klasse REG

WS06/07 Referentin: Katharina Blinova. Formale Sprachen. Hauptseminar Intelligente Systeme Dozent: Prof. Dr. J. Rolshoven

Vorkurs Theoretische Informatik

Formale Sprachen und Automaten

Abschnitt 4: Daten und Algorithmen

Logik. Logik. Vorkurs Informatik Theoretischer Teil WS 2013/ September Vorkurs Informatik - Theorie - WS2013/14

Vorbemerkung. Allgemeines zu Shell Scripts. Aufruf. Einfaches Beispiel

Maike Buchin 18. Februar 2016 Stef Sijben. Probeklausur. Theoretische Informatik. Bearbeitungszeit: 3 Stunden

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

Sprachen sind durch folgenden Aufbau gekennzeichnet:

Nachklausur zur Vorlesung Theoretische Grundlagen der Informatik Wintersemester 2012/13

Grundbegriffe der Informatik Tutorium 33

Syntax. 1 Jedes A AS AL ist eine (atomare) Formel. 2 Ist F eine Formel, so ist auch F eine Formel. 3 Sind F und G Formeln, so sind auch

Grundbegriffe der Informatik Kapitel 3: Mengen, Alphabete, Abbildungen

3.1 Reservierte Wörter

Lemma Für jede monotone Grammatik G gibt es eine kontextsensitive

Datenformat zum Import von CSV-Dateien

Grundlagen der theoretischen Informatik

Grundlagen der Theoretischen Informatik

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

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

Einführung in die Programmierung EBNF. Thomas R. Gross. Department Informatik ETH Zürich

Elementare Konzepte von

Elementare Unix-Befehle 11

Herzlich willkommen!!!

Arithmetik in der tcsh

Formale Grundlagen der Informatik 1 Kapitel 13 Aussagenlogik Syntax & Semantik

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

Datenformat zum Import von CSV-Dateien

Spezifikation in Datalog:

Grundlagen der Informatik II

Theorie der Informatik

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

2.2 Syntax, Semantik und Simulation

(Prüfungs-)Aufgaben zu formale Sprachen

Formale Sprachen und endliche Automaten

Funktionen in JavaScript

Grundbegriffe der Informatik

Funktionen in JavaScript

Mathematik für Informatiker 1 Wintersemester 2013/14 Übungsblatt 4

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

Kapitel IV Formale Sprachen und Grammatiken

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

Abschnitt 17: Beispiel: Die Klasse String (Teil 2), das Interface Comparable<T>

Übungsblatt 1. Lorenz Leutgeb. 30. März 2015

Proseminar UNIX Tools. Ferdinand Beyer

Reguläre Sprachen und endliche Automaten

Das Postsche Korrespondenzproblem

Die mathematische Seite

Reguläre Sprachen 2 Endliche Automaten erkennen reguläre Sprachen Satz Jede von einem endlichen Automaten erkannte Sprache ist regulär.

Datenformat zum Import von CSV-Dateien

Grundlagen der Theoretischen Informatik, SoSe 2008

Dank. Grundlagen der Theoretischen Informatik / Einführung in die Theoretische Informatik I. Reguläre Ausdrücke als Suchmuster für grep

MySQL Informationsgewinnung Teil 3. Stefan Maihack Dipl. Ing. (FH) Datum:

Formale Grundlagen der Informatik 1 Kapitel 16 Normalformen und Hornformeln

Tag 2 Repetitorium Informatik (Java)

Frank Heitmann 2/42. 1 Etwas aus der realen Welt in der Logik abstrakt ausdrücken. 2 In der Logik Schlüsse ziehen.

Grammatik Prüfung möglich, ob eine Zeichenfolge zur Sprache gehört oder nicht

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

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

1 Σ endliches Terminalalphabet, 2 V endliche Menge von Variablen (mit V Σ = ), 3 P (V (Σ ΣV )) {(S, ε)} endliche Menge von Regeln,

Logische Programmierung & Deduktive Datenbanken Klausur

Grundlagen der Theoretischen Informatik

Lexikalische Programmanalyse der Scanner

Einführung in die Theoretische Informatik

Automaten und Coinduktion

Erstellen einer CSV-Datei

Einführung in die Theoretische Informatik

Hausaufgaben. zur Vorlesung. Vollständige Induktion. 1. Beweist folgende Formeln (zu beweisen ist nur die Gleichheit mit dem. i=1 (4 + i)!

Sprachen und Programmiersprachen

Formalismen für REG. Formale Grundlagen der Informatik 1 Kapitel 7 Kontextfreie Sprachen. Das Pumping Lemma. Abschlusseigenschaften

Fragenkatalog 2. Abgabegespräch Formale Modellierung 3 Reguläre Sprachen

Theoretische Grundlagen der Informatik

Es gibt immer einen Schlüssel und einen zugehörigen Wert,

Blocktutorium EidP. -Theorie II. EBNF Syntaxdiagramm Methodenüberladung

Software Entwicklung 1

Transkript:

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 einfaches Beispiel...3 Welche dieser Worte sind in der vom gegebenen regulären Ausdruck erzeugten Sprache enthalten?...3 Lösung...4 3 Ein anspruchsvolleres Beispiel...4 Welcher reguläre Ausdruck erzeugt die vorgegebene Sprache?...4 Lösung...5 4 Aufgaben to go...5 Empfehlenswerte Referenzen [1] RegEx Coach(http://weitz.de/regex-coach) Tool zur Verifikation von regulären Ausdrücken unter Eingabe von Testwörtern [2] Uwe Schöning "Theoretische Informatik kurzgefasst", Kapitel "1.2.3 Reguläre Ausdrücke" [3] regex Tester (http://www.regex-tester.de) ein online Testprogramm für reguläre Ausdrücke 0 Wozu reguläre Ausdrücke? Reguläre Ausdrücke können genau die Klasse der regulären Sprachen darstellen. Zum Beweis siehe [2]. Das heisst z. B.: für alles was man mit einem endlichen Automaten darstellen kann, kann man auch einen regulären Ausdruck angeben und andersherum. Es fragt sich nur, was einfacher ist. Im Rahmen der Vorlesung "Compilerbau" werden reguläre Ausdrücke verwendet, um rekursiv die zulässigen Konstrukte für die Syntax einer Computersprache zu definieren. Dadurch kommen auch mächtige Computersprachen mit erstaunlich wenigen Regeldefinitionen aus. Müßte man aber alle gültigen Konstruktionen für Regeln explizit angeben (also ohne reguläre Ausdrücke), wären enorm viel mehr Definitionen notwendig, worunter die Übersicht nicht unerheblich leiden würde. Die Computersprache SQL lässt zu, dass mit regulären Ausdrücken nach Daten gesucht wird. Das ermöglicht ziemlich kompakte Datenbankanfragen. Im Rahmen der Vorlesung "Datenbanken" wird das noch viel eingehender behandelt. Seite 1 / 6

1 Die Elemente regulärer Ausdrücke Seien im Folgenden die Zeichen R und S induktiv selbst reguläre Ausdrücke, sowie 'a', 'b' und 'c' beliebige Zeichen des zulässigen Alphabets. Wenn nichts weiter angegeben ist, entspricht das Alphabet dem ASCII-Zeichensatz. x und y sind beliebige natürliche Zahlen. Die doppelten Hochkommas gehören im folgenden jeweils nicht zum regulären Ausdruck, sondern zeigen lediglich den Beginn und das Ende desselben an. "" : leeres Wort. Auch das leere Wort ist ein zulässiger regulärer Ausdruck. Wiederholungen von regulären Ausdrücken. "R{x}" : genau x-fache Wiederholung von R. "R{x,}" : mindestens x-fache Wiederholung von R. "R{x,y}" : mindestens x-, aber höchstens y-fache Wiederholung von R "R*" : ("Kleen'scher Stern") beliebige Wiederholung von R. Entspricht dem Ausdruck "R{0,}". "R+" : mindestens einmalige Wiederholung von R. Entspricht dem Ausdruck "R{1,}". "R?" : optionale einmalige Wiederholung von R. Entspricht dem Ausdruck "R{0,1}". "RS" : reguläre Ausdrücke werden automatisch konkateniert ohne dass ein spezieller Konkatenationsoperator aufgeführt werden muss. Durch die Konkatenation folgt auf die Erkennung des Ausdrucks R die Erkennung des Ausdrucks S. "." : ("Wild Card") Platzhalter für ein beliebiges Zeichen des Alphabets. "R$" : nach Erkennung des Ausdrucks R muss das Wort zu Ende sein. "^R" : der Beginn des Wortes muss durch den Ausdruck R erkannt werden. "[abc]" : ein einzelnes beliebiges Zeichen aus der Liste der zwischen den eckigen Klammern aufgeführten Zeichen. "[a-c]" : ein einzelnes beliebiges Zeichen aus dem Bereich der Zeichen zwischen 'a' und 'c' (einschließlich diesen). "[^abc]": ("Negation") ein beliebiges Zeichen aus dem Alphabet, das nicht einem der in der Liste der zwischen '^' und ']' aufgeführten Zeichen entspricht. "R S": alternative Auswahl von entweder dem Ausdruck R oder dem Ausdruck S. "(R)": durch die Klammerung wird der Ausdruck R zu einer Einheit zusammengefasst. Ein nachfolgender Operator wie z. B. '*' oder '+' wirkt sich dann auf den gesamten Ausdruck R aus. "a" : Beliebige Zeichen des Alphabets, die nicht Teil der oben genannten Syntax sind, werden im regulären Ausdruck "einfach so" notiert. Insbesondere sind einzelne Anführungsstriche nicht notwendig, für einzelne Zeichen des Alphabets aber zulässig. Seite 2 / 6

Wenn Zeichen der Syntax (also z. B.: '(', ')', '[', ']', '^' oder '*') in Wörtern der Sprache erlaubt sein sollen, müssen diese Zeichen maskiert werden, was durch ein vorangestelltes Backslash (also ein '\') erfolgt. Wenn in einem Wort z. B. ein Fragezeichen erlaubt sein soll, muss also in dem regulären Ausdruck an der entsprechenden Stelle "\?" stehen. ' ' : Leerzeichen müssen durch Angabe von einzelnen Hochkommas explizit angegeben werden. Alle Leerzeichen in regulären Ausdrücken, die nicht in einzelne Hochkommas gefasst werden, werden ignoriert. Doppelte Hochkommas dienen dem Konkatenieren von Zeichen des Alphabets. Statt z. B. 'a' 'b' 'c' zu schreiben, kann man auch "abc" schreiben. Achtung: Diese Syntaxregeln weichen evtl. von denen aus dem Skript leicht ab. In der Prüfung unbedingt die Syntax des Skripts einhalten! Leider gibt es in der Praxis immer wieder Unterschiede in den Implementierungen der Regeln. Da hilft meist nur das genaue Lesen der Dokumentation (die hoffentlich vorliegt). 2 Ein einfaches Beispiel Welche dieser Worte sind in der vom gegebenen regulären Ausdruck erzeugten Sprache enthalten? ( [ 0 9 ] + [ \* \+ / \- ] [ 0 9 ] + ) * = [ 0 3 ] + (a) "3-2=1" (b) "0/0=2007" (c) "0 9+0 9=0" (d) "0 99+99 0=1" (e) "" (f) "1001+1001=2002" (g) "=0" (h) "99+1=" (i) "77+=77" (j) "13-33==1333" Seite 3 / 6

. Lösung (a) Ja. (b) Nein. Das Literal '7' ist rechts neben dem '=' nicht zugelassen. (c) Nein. Zwar kann der Teil links vom '=' beliebig wiederholt werden, aber dann müssen die Zahlen "mittendrin" aus mindestens zwei Ziffern bestehen. (d) Ja. (e) Nein. Ein zulässiges Wort muss mindestens aus '=' und einer nachfolgenden Ziffer zwischen 0 und 3 bestehen. (f) Ja. (g) Ja. (h) Nein. Nach dem '=' muss noch mindestens eine Ziffer zwischen 0 und 3 folgen. (i) Nein. Wenn auf der linken Seite etwas steht, muss nach dem Operator noch eine mindestens einstellige Zahl vor dem '=' folgen. (j) Nein. In zulässigen Wörtern muss genau ein '=' vorkommen und zwar genau vor der Zahl ganz rechts. 3 Ein anspruchsvolleres Beispiel Welcher reguläre Ausdruck erzeugt die vorgegebene Sprache? Es soll ein Erkennungsmuster für ein spezielles CSV-Format erstellt werden. CSV steht für "comma separated values", also Werte, die durch Kommas getrennt werden. In der EDV wird ein solches Datenformat oft für den pragmatischen Datenaustausch zwischen Applikationen verwendet. In diesem speziellen Szenario gelten folgende Vorschriften: Am Beginn der Datei steht genau einmal die Zeichenfolge "csv", so dass ein lesendes Programm weiss, dass es sich um eine CSV-Datei handelt. Werte sind Zahlenfolgen von einer Länge zwischen ein und zehn Ziffern. Führende Nullen sind nicht zulässig, der Wert "0" (bestehend aus einer einzelnen Ziffer '0') aber schon. Nach jedem Wert muss ein Komma (',') folgen, außer nach dem letzten. Nach dem letzten Wert darf kein ',' stehen. Vor dem ersten Wert der Datei muss genau einmal ein '{' stehen. Nach dem letzten Wert der Datei muss genau einmal ein '}' stehen. Zwischen Werten und Kommas sind optional auch Zeilenumbrüche erlaubt. Dies entspricht dem ASCII-Zeichen '\n'. Eine Datei kann auch leer sein (dann fehlen auch die Kennung "csv" sowie die geschweiften Klammern). Seite 4 / 6

. Lösung Wie geht man an so eine Aufgabe heran? Man kann z. B. diese Überlegungen anstellen: Da die Datei auch leer sein darf, ist also das leere Wort erlaubt. Der gesamte resultierende reguläre Ausdruck muss also von einer " ( )? "-Konstruktion eingefasst sein. Innerhalb der " ( )? "-Konstruktion beginnt der Ausdruck mit "csv". Danach muss ein '{' folgen und am Ende ein '}'. Diese beiden Zeichen müssen mit einem vorangestellten \ (=Backslash) maskiert werden, damit sie als ASCII-Zeichen erkannt werden und nicht als Teil der Syntax des regulären Ausdrucks. Damit haben wir als Zwischenschritt soweit mal den Ausdruck: " ( csv \{ \} )? " Jetzt müssen noch irgendwie Werte erlaubt sein. Wie sieht ein zulässiger Wert überhaupt aus? Führende Nullen werden dadurch ausgeschlossen, dass als erste Ziffer nur eine zwischen 1 und 9 zugelassen wird und der Wert "0" als alternativer Fall eingebaut wird. Allerdings muss nach der ersten Ziffer auch wieder die Ziffer 0 zugelassen werden. Die Bauweise zulässiger Werte ist also diese: " ( 0 [ 1 9 ] [ 0 9 ] { 0, 9 } ) " Wenn die Datei nicht leer ist, müssen auch Werte zwischen den geschweiften Klammern aufgeführt werden. Wenn allerdings nur ein einzelner Wert enthalten ist, darf auch kein Komma vorkommen. D. h. eine einmalige Aufführung des Wertes ist innerhalb der geschweiften Klammern zwingend und bei jeder weiteren Aufführung eines Wertes muss zuerst ein Komma aufgeführt werden. Außerdem können diese "weiteren Aufführungen von Werten" zwischen 0 und beliebig oft auftauchen. Insgesamt ergibt das als Ausdruck zwischen den geschweiften Klammern: " ( 0 [ 1 9 ] [ 0 9 ] { 0, 9 } ) ( ',' ( 0 [ 1 9 ] [ 0 9 ] { 0, 9 } ) ) * " Die optionalen Zeilenumbrüche müssen auch berücksichtigt werden. Sie dürfen nur zwischen Werten und den trennenden Kommas stehen, also müssen sie auch genau da eingebaut werden: " ( 0 [ 1 9 ] [ 0 9 ] { 0, 9 } ) ( '\n'? ',' '\n'? ( 0 [ 1 9 ] [ 0 9 ] { 0, 9 } ) ) * " Zuletzt muss noch der Ausdruck für Werte in den oben zusammengebauten Ausdruck für die "Gesamtdatei" zwischen die geschweiften Klammern eingebastelt werden und fertig ist das Ergebnis: " ( csv \{ ( 0 [ 1 9 ] [ 0 9 ] { 0, 9 } ) ( '\n'? ',' '\n'? ( 0 [ 1 9 ] [ 0 9 ] { 0, 9 } ) ) * \} )? " Seite 5 / 6

4 Aufgaben to go 1. Erstelle einen regulären Ausdruck, der einfache deutsche Sätze erkennt. Dabei gelten folgende Regeln: Das Alphabet besteht aus der Menge {'Prädikat', 'Substantiv', 'Verb', '.', 'und', 'oder', ','} Sätze müssen aus der Abfolge "Subjekt Verb Objekt" bestehen. Ein Subjekt besteht aus einem optionalen Prädikat und einem nachfolgenden Substantiv. Ebenso besteht ein Objekt aus einem optionalen Prädikat und einem nachfolgenden Substantiv. Nach einem Satz kommt entweder eine Konjunktion und dann ein weiterer Satz oder ein Punkt (also das Literal '.'). Als Konjunktion ist nur eines der Literale 'und', 'oder' oder ',' erlaubt. 2. Erstelle über dem Alphabet {'1', '2', '3'} einen regulären Ausdruck, der alle dreistelligen Wörter erkennt, die nicht einem dieser drei Wörter entsprechen: "123" "321" "222" Seite 6 / 6