40
Grundbegriffe der Informatik Einheit 15: Regul¨ are Ausdr¨ ucke und rechtslineare Grammatiken Thomas Worsch Universit¨ at Karlsruhe, Fakult¨ at f¨ ur Informatik Wintersemester 2008/2009 1/25

Grundbegri e der Informatik - liin · Grundbegri e der Informatik Einheit 15: Regul are Ausdrucke und rechtslineare Grammatiken Thomas Worsch Universit at Karlsruhe, Fakult at f ur

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Grundbegriffe der InformatikEinheit 15: Regulare Ausdrucke und rechtslineare Grammatiken

Thomas Worsch

Universitat Karlsruhe, Fakultat fur Informatik

Wintersemester 2008/2009

1/25

Was kann man mit endlichen Akzeptoren?

I manche Sprachen kann man mit endlichen Akzeptorenerkennen

I z. B. {a}+{b} ∪ {b}+{a}I manche Sprachen nicht

I z. B. {akbk | k ∈ N0}I Charakterisierung der erkennbaren Sprachen?

I i. e. Beschreibung ohne Benutzung endlicher Akzeptoren

2/25

Uberblick

Regulare Ausdrucke

Rechtslineare Grammatiken

Uberblick 3/25

Uberblick

Regulare Ausdrucke

Rechtslineare Grammatiken

Regulare Ausdrucke 4/25

Zum Begriff

regularer Ausdruck

I Ursprung:Stephen Kleene: Representation of Events in Nerve Nets andFinite Automata,in: Shannon, McCarthy, Ashby (eds.): Automata Studies, 1956

I heute: verschiedene Bedeutungen

I in dieser Vorlesung: die”klassische“ Definition

I Verallgemeinerung: regular expressionsI sehr nutzlichI verschiedene Varianten (bei Syntax, bei Semantik)I emacs, grep, sed, . . .I Java (java.util.regex), Python, Perl, . . .

Regulare Ausdrucke 5/25

Definition regularer Ausdrucke (1)

I sei Z das Alphabet Z = {|, (, ), *, O/}I sei A ein Alphabet, das kein Zeichen aus Z enthalt

I regularer Ausdruck uber A ist eine Zeichenfolge uber demAlphabet A ∪ Z , die gewissen Vorschriften genugt.

I Menge der regularen Ausdrucke ist wie folgt festgelegt:I O/ ist ein regularer Ausdruck.I Fur jedes a ∈ A ist a ein regularer Ausdruck.I Wenn R1 und R2 regulare Ausdrucke sind, dann sind auch

(R1|R2) und (R1R2) regulare Ausdrucke.I Wenn R ein regularer Ausdruck ist, dann auch (R*).I Nichts anderes sind regulare Ausdrucke.

Regulare Ausdrucke 6/25

Klammereinsparungsregeln

I”Stern- vor Punktrechnung“

I”Punkt- vor Strichrechnung“

I Beispiel:I R1|R2R3* ist alsI (R1|(R2(R3*))) zu verstehen.

I Bei mehreren gleichen binaren Operatoren gilt das als linksgeklammert

I BeispielI R1|R2|R3 ist alsI ((R1|R2)|R3) zu verstehen.

Regulare Ausdrucke 7/25

Beispiele

• O/ • 0 • 1• (01) • ((01)0) • (((01)0)0) • ((01)(00))• (O/|1) • (0|1) • ((0(0|1))|1) • (0|(1|(0|0)))• (O/*) • (0*) • ((10)(1*)) • (((10)1)*)• ((0*)*) • (((((01)1)*)*)|(O/*))

Mit Klammereinsparungsregeln:

• 01 • 010 • 0100 • 01(00)• O/|1 • 0|1 • 0(0|1)|1 • (0|(1|(0|0)))• O/* • 0* • 101* • (101)*• 0** • (011)**|O/*

Regulare Ausdrucke 8/25

Nichtbeispiele

keine regularen Ausdrucke uber {0, 1}:(|1) vor | fehlt ein regularer Ausdruck|O/| vor und hinter | fehlt je ein regularer Ausdruck()01 zwischen ( und ) fehlt ein regularer Ausdruck((01) Klammern mussen

”gepaart“ auftreten

*(01) vor * fehlt ein regularer Ausdruck2* 2 ist nicht Zeichen des Alphabetes

Regulare Ausdrucke 9/25

Definition regularer Ausdrucke (2)

I alternative Formulierung mit Hilfe einer kontextfreienGrammatik

I regulare Ausdrucke uber Alphabet A sind die Worter, die vonder folgenden Grammatik erzeugt werden:

G = ({R}, {|, (, ), *, O/} ∪ A, R, P)

und P = {R → O/, R → (R|R), R → (RR), R → (R*)}∪ {R → a | a ∈ A}

Regulare Ausdrucke 10/25

Beschriebene formale Sprache

Die von einem regularen Ausdruck R beschriebene formale Sprache〈R〉 ist wie folgt definiert:

I 〈O/〉 = {} (d. h. die leere Menge).

I Fur a ∈ A ist 〈a〉 = {a}.I Sind R1 und R2 regulare Ausdrucke, so ist〈R1|R2〉 = 〈R1〉 ∪ 〈R2〉.

I Sind R1 und R2 regulare Ausdrucke, so ist〈R1R2〉 = 〈R1〉 · 〈R2〉.

I Ist R ein regularer Ausdruck, so ist 〈R*〉 = 〈R〉∗.

I die Definition folgt der fur regulare Ausdrucke

Regulare Ausdrucke 11/25

Beschriebene formale Sprache

Die von einem regularen Ausdruck R beschriebene formale Sprache〈R〉 ist wie folgt definiert:

I 〈O/〉 = {} (d. h. die leere Menge).

I Fur a ∈ A ist 〈a〉 = {a}.I Sind R1 und R2 regulare Ausdrucke, so ist〈R1|R2〉 = 〈R1〉 ∪ 〈R2〉.

I Sind R1 und R2 regulare Ausdrucke, so ist〈R1R2〉 = 〈R1〉 · 〈R2〉.

I Ist R ein regularer Ausdruck, so ist 〈R*〉 = 〈R〉∗.

I die Definition folgt der fur regulare Ausdrucke

Regulare Ausdrucke 11/25

Beispiele fur 〈R〉

Betrachten wir drei einfache Beispiele:

I R = a|b: Dann ist〈R〉 = 〈a|b〉 = 〈a〉 ∪ 〈b〉 = {a} ∪ {b} = {a, b}.

I R = (a|b)*: Dann ist〈R〉 = 〈(a|b)*〉 = 〈a|b〉∗ = {a, b}∗.

I R = (a*b*)*: Dann ist〈R〉 = 〈(a*b*)*〉 = 〈a*b*〉∗

= (〈a*〉〈b*〉)∗ = (〈a〉∗〈b〉∗)∗ = ({a}∗{b}∗)∗ .

I Nachdenken: ({a}∗{b}∗)∗ = {a, b}∗

Regulare Ausdrucke 12/25

Beispiele fur 〈R〉

Betrachten wir drei einfache Beispiele:

I R = a|b: Dann ist〈R〉 = 〈a|b〉 = 〈a〉 ∪ 〈b〉 = {a} ∪ {b} = {a, b}.

I R = (a|b)*: Dann ist〈R〉 = 〈(a|b)*〉 = 〈a|b〉∗ = {a, b}∗.

I R = (a*b*)*: Dann ist〈R〉 = 〈(a*b*)*〉 = 〈a*b*〉∗

= (〈a*〉〈b*〉)∗ = (〈a〉∗〈b〉∗)∗ = ({a}∗{b}∗)∗ .

I Nachdenken: ({a}∗{b}∗)∗ = {a, b}∗

Regulare Ausdrucke 12/25

Beispiele fur 〈R〉

Betrachten wir drei einfache Beispiele:

I R = a|b: Dann ist〈R〉 = 〈a|b〉 = 〈a〉 ∪ 〈b〉 = {a} ∪ {b} = {a, b}.

I R = (a|b)*: Dann ist〈R〉 = 〈(a|b)*〉 = 〈a|b〉∗ = {a, b}∗.

I R = (a*b*)*: Dann ist〈R〉 = 〈(a*b*)*〉 = 〈a*b*〉∗

= (〈a*〉〈b*〉)∗ = (〈a〉∗〈b〉∗)∗ = ({a}∗{b}∗)∗ .

I Nachdenken: ({a}∗{b}∗)∗ = {a, b}∗

Regulare Ausdrucke 12/25

Beispiele fur 〈R〉

Betrachten wir drei einfache Beispiele:

I R = a|b: Dann ist〈R〉 = 〈a|b〉 = 〈a〉 ∪ 〈b〉 = {a} ∪ {b} = {a, b}.

I R = (a|b)*: Dann ist〈R〉 = 〈(a|b)*〉 = 〈a|b〉∗ = {a, b}∗.

I R = (a*b*)*: Dann ist〈R〉 = 〈(a*b*)*〉 = 〈a*b*〉∗

= (〈a*〉〈b*〉)∗ = (〈a〉∗〈b〉∗)∗ = ({a}∗{b}∗)∗ .

I Nachdenken: ({a}∗{b}∗)∗ = {a, b}∗

Regulare Ausdrucke 12/25

Wie ist das denn eigentlich?

I Kann man”allgemein“ von regularen Ausdrucken R1, R2

feststellen, ob 〈R1〉 = 〈R2〉 ist?

I Geht das algorithmisch?

I Welche formalen Sprachen sind denn durch regulareAusdrucke beschreibbar?

Regulare Ausdrucke 13/25

Aquivalenz regularer Ausdrucke

I Es gibt Algorithmen, um fur regulare Ausdrucken R1, R2

festzustellen, ob 〈R1〉 = 〈R2〉 istI sogar konzeptionell ziemlich einfache

I Aber: Dieses Problem ist PSPACE-vollstandig.I Definition: siehe nachste EinheitI d. h. jedenfalls: alle bisher bekannten (!) Algorithmen sind im

allgemeinen sehr sehr sehr langsam, Laufzeit z. B. 2n2

. . .

I Man weiß nicht, ob es vielleicht doch Algorithmen mitpolynomieller Laufzeit fur das Problem gibt, aber man sie

”nur noch nicht gefunden“ hat.

Regulare Ausdrucke 14/25

Charakterisierungen

SatzFur jede formale Sprache L sind die folgenden drei Aussagenaquivalent:

1. L kann von einem endlichen Akzeptor erkannt werden.

2. L kann durch einen regularen Ausdruck beschrieben werden.

3. L kann von einer rechtslinearen Grammatik erzeugt werden.

I rechtslineare Grammatiken kommen gleich

I Eine formale Sprache, die die Eigenschaften des Satzes hat,heißt regulare Sprache.

I Jede rechtslineare Grammatik ist eine kontextfreie Grammatik,also ist jede regulare Sprache eine kontextfreie Sprache,

I aber nicht umgekehrt, wie man z. B. an {akbk | k ∈ N0} sieht.

Regulare Ausdrucke 15/25

Charakterisierungen

SatzFur jede formale Sprache L sind die folgenden drei Aussagenaquivalent:

1. L kann von einem endlichen Akzeptor erkannt werden.

2. L kann durch einen regularen Ausdruck beschrieben werden.

3. L kann von einer rechtslinearen Grammatik erzeugt werden.

I rechtslineare Grammatiken kommen gleich

I Eine formale Sprache, die die Eigenschaften des Satzes hat,heißt regulare Sprache.

I Jede rechtslineare Grammatik ist eine kontextfreie Grammatik,also ist jede regulare Sprache eine kontextfreie Sprache,

I aber nicht umgekehrt, wie man z. B. an {akbk | k ∈ N0} sieht.

Regulare Ausdrucke 15/25

Zum Beweis des Satzes

konstruktiv:I zu gegebenem endlichen Akzeptor A ein regularer Ausdruck R

mit 〈R〉 = L(A)I

”mittel schwer“, z. B. inspiriert vom Algorithmus von Warshall

I zu gegebenem regularen Ausdruck R eine rechtslineareGrammatik G mit L(G ) = 〈R〉:

I”relativ leicht“

I zu gegebener rechtslinearer Grammatik G ein endlicherAkzeptor A mit L(A) = L(G ):

I am”schwierigsten“

I beachte: fur die umgekehrten Richtungen braucht man keineexpliziten Konstruktionen

Regulare Ausdrucke 16/25

Zum Beweis des Satzes

konstruktiv:I zu gegebenem endlichen Akzeptor A ein regularer Ausdruck R

mit 〈R〉 = L(A)I

”mittel schwer“, z. B. inspiriert vom Algorithmus von Warshall

Kernidee:

Ri ,0,j = reg. Aus. fur {x ∈ X | f (zi , x) = zj} ∪

{{ε} falls i = j

{} falls i 6= j

Ri ,k,j = (Ri ,k−1,j | (Ri ,k−1,k−1 (Rk−1,k−1,k−1)* Rk−1,k−1,j))

I zu gegebenem regularen Ausdruck R eine rechtslineareGrammatik G mit L(G ) = 〈R〉:

I”relativ leicht“

I zu gegebener rechtslinearer Grammatik G ein endlicherAkzeptor A mit L(A) = L(G ):

I am”schwierigsten“

I beachte: fur die umgekehrten Richtungen braucht man keineexpliziten Konstruktionen

Regulare Ausdrucke 16/25

Zum Beweis des Satzes

konstruktiv:I zu gegebenem endlichen Akzeptor A ein regularer Ausdruck R

mit 〈R〉 = L(A)I

”mittel schwer“, z. B. inspiriert vom Algorithmus von Warshall

I zu gegebenem regularen Ausdruck R eine rechtslineareGrammatik G mit L(G ) = 〈R〉:

I”relativ leicht“

I zu gegebener rechtslinearer Grammatik G ein endlicherAkzeptor A mit L(A) = L(G ):

I am”schwierigsten“

I beachte: fur die umgekehrten Richtungen braucht man keineexpliziten Konstruktionen

Regulare Ausdrucke 16/25

Zum Beweis des Satzes

konstruktiv:I zu gegebenem endlichen Akzeptor A ein regularer Ausdruck R

mit 〈R〉 = L(A)I

”mittel schwer“, z. B. inspiriert vom Algorithmus von Warshall

I zu gegebenem regularen Ausdruck R eine rechtslineareGrammatik G mit L(G ) = 〈R〉:

I”relativ leicht“

I zu gegebener rechtslinearer Grammatik G ein endlicherAkzeptor A mit L(A) = L(G ):

I am”schwierigsten“

I beachte: fur die umgekehrten Richtungen braucht man keineexpliziten Konstruktionen

Regulare Ausdrucke 16/25

Zum Beweis des Satzes

konstruktiv:I zu gegebenem endlichen Akzeptor A ein regularer Ausdruck R

mit 〈R〉 = L(A)I

”mittel schwer“, z. B. inspiriert vom Algorithmus von Warshall

I zu gegebenem regularen Ausdruck R eine rechtslineareGrammatik G mit L(G ) = 〈R〉:

I”relativ leicht“

Idee: z. B. fur (R1|R2)I gegeben G1 = (N1, T1, X1, P1) fur 〈R1〉I gegeben G2 = (N2, T2, X2, P2) fur 〈R2〉 mit N1 ∩ N2 = ∅I G = ({X0} ∪ N1 ∪ N2, T1 ∪ T2, X0, {X0 → X1 | X2} ∪ P1 ∪ P2)

Grammatik fur 〈(R1|R2)〉 (mit “neuem“ X0 /∈ N1 ∪ N2)

I zu gegebener rechtslinearer Grammatik G ein endlicherAkzeptor A mit L(A) = L(G ):

I am”schwierigsten“

I beachte: fur die umgekehrten Richtungen braucht man keineexpliziten Konstruktionen

Regulare Ausdrucke 16/25

Zum Beweis des Satzes

konstruktiv:I zu gegebenem endlichen Akzeptor A ein regularer Ausdruck R

mit 〈R〉 = L(A)I

”mittel schwer“, z. B. inspiriert vom Algorithmus von Warshall

I zu gegebenem regularen Ausdruck R eine rechtslineareGrammatik G mit L(G ) = 〈R〉:

I”relativ leicht“

I zu gegebener rechtslinearer Grammatik G ein endlicherAkzeptor A mit L(A) = L(G ):

I am”schwierigsten“

I beachte: fur die umgekehrten Richtungen braucht man keineexpliziten Konstruktionen

Regulare Ausdrucke 16/25

Zum Beweis des Satzes

konstruktiv:I zu gegebenem endlichen Akzeptor A ein regularer Ausdruck R

mit 〈R〉 = L(A)I

”mittel schwer“, z. B. inspiriert vom Algorithmus von Warshall

I zu gegebenem regularen Ausdruck R eine rechtslineareGrammatik G mit L(G ) = 〈R〉:

I”relativ leicht“

I zu gegebener rechtslinearer Grammatik G ein endlicherAkzeptor A mit L(A) = L(G ):

I am”schwierigsten“

I beachte: fur die umgekehrten Richtungen braucht man keineexpliziten Konstruktionen

Regulare Ausdrucke 16/25

Zum Beweis des Satzes

konstruktiv:I zu gegebenem endlichen Akzeptor A ein regularer Ausdruck R

mit 〈R〉 = L(A)I

”mittel schwer“, z. B. inspiriert vom Algorithmus von Warshall

I zu gegebenem regularen Ausdruck R eine rechtslineareGrammatik G mit L(G ) = 〈R〉:

I”relativ leicht“

I zu gegebener rechtslinearer Grammatik G ein endlicherAkzeptor A mit L(A) = L(G ):

I am”schwierigsten“

I beachte: fur die umgekehrten Richtungen braucht man keineexpliziten Konstruktionen

Regulare Ausdrucke 16/25

Was ist wichtig

Das sollten Sie mitnehmen:I Definition

”klassischer“ regularer Ausdrucke

I atomare:I O/I a ∈ A

I zusammengesetzte:I (R1|R2)I (R1R2)I (R)*

I wissen: regulare Ausdrucke und die VerallgemeinerungRegular Expressions sind z. B. bei Textverarbeitungsaufgabenmanchmal nutzlich

Das sollten Sie uben:

I zu L ein R mit 〈R〉 = L konstruieren

I zu R das 〈R〉 bestimmen

Regulare Ausdrucke 17/25

Uberblick

Regulare Ausdrucke

Rechtslineare Grammatiken

Rechtslineare Grammatiken 18/25

Motivation

I Mit kontextfreien Grammatiken kann man jedenfalls zum Teilandere formale Sprachen erzeugen, als man mit endlichenAkzeptoren erkennen kann.

I Beispiel:I G = ({X}, {a, b}, X , {X → aXb | ε}) erzeugt {akbk | k ∈ N0}I und diese Sprache ist nicht regular.

I Kann man kontextfreie Grammatiken so einschranken, dass siezu endlichen Akzeptoren passen?

Rechtslineare Grammatiken 19/25

Rechtslineare Grammatiken: Definition

I Eine rechtslineare Grammatik ist eine kontextfreie GrammatikG = (N, T , S , P), die der folgenden Einschrankung genugt:Jede Produktion ist

I entweder von der Form X → w mit w ∈ T ∗

I oder von der Form X → wY mit w ∈ T ∗ und X , Y ∈ N.

I Auf der rechten Seite einer Produktion darf also hochstens einNichterminalsymbol vorkommen, und wenn dann nur alsletztes Symbol.

Rechtslineare Grammatiken 20/25

Rechtslineare Grammatiken: Beispiel

G = ({X}, {a, b}, X , {X → abX | bbaX | ε}L(G ) = 〈(ab|bba)*〉

Rechtslineare Grammatiken 21/25

Rechtslineare Grammatiken: Nichtbeispiel

I G = ({X}, {a, b}, X , {X → aXb | ε}) ist nicht rechtslinear,I denn in X → aXb steht das Nichtterminalsymbol X nicht am

rechten Ende.

I Da die erzeugte formale Sprache nicht regular ist,kann es auch gar keine rechtslineare Grammatik geben,die {akbk | k ∈ N0} erzeugt.

Rechtslineare Grammatiken 22/25

Sprechweisen

I Rechtslineare Grammatiken heißen auch Typ-3-Grammatiken.

I Kontextfreien Grammatiken heißen auch Typ-2-Grammatiken.I Man ahnt schon: Es gibt auch noch

I Typ-1-Grammatiken undI Typ-0-Grammatiken,

die wir hier nicht weiter betrachten werden.

I Wenn fur ein i ∈ {0, 1, 2, 3} eine formale Sprache L von einerTyp-i-Grammatik erzeugt wird, dann sagt man auch, L seieine Typ-i-Sprache oder kurz vom Typ i .

Rechtslineare Grammatiken 23/25

Sprechweisen

I Rechtslineare Grammatiken heißen auch Typ-3-Grammatiken.

I Kontextfreien Grammatiken heißen auch Typ-2-Grammatiken.I Man ahnt schon: Es gibt auch noch

I Typ-1-Grammatiken undI Typ-0-Grammatiken,

die wir hier nicht weiter betrachten werden.

I Wenn fur ein i ∈ {0, 1, 2, 3} eine formale Sprache L von einerTyp-i-Grammatik erzeugt wird, dann sagt man auch, L seieine Typ-i-Sprache oder kurz vom Typ i .

Rechtslineare Grammatiken 23/25

Sprechweisen

I Rechtslineare Grammatiken heißen auch Typ-3-Grammatiken.

I Kontextfreien Grammatiken heißen auch Typ-2-Grammatiken.I Man ahnt schon: Es gibt auch noch

I Typ-1-Grammatiken undI Typ-0-Grammatiken,

die wir hier nicht weiter betrachten werden.

I Wenn fur ein i ∈ {0, 1, 2, 3} eine formale Sprache L von einerTyp-i-Grammatik erzeugt wird, dann sagt man auch, L seieine Typ-i-Sprache oder kurz vom Typ i .

Rechtslineare Grammatiken 23/25

Sprechweisen

I Rechtslineare Grammatiken heißen auch Typ-3-Grammatiken.

I Kontextfreien Grammatiken heißen auch Typ-2-Grammatiken.I Man ahnt schon: Es gibt auch noch

I Typ-1-Grammatiken undI Typ-0-Grammatiken,

die wir hier nicht weiter betrachten werden.

I Wenn fur ein i ∈ {0, 1, 2, 3} eine formale Sprache L von einerTyp-i-Grammatik erzeugt wird, dann sagt man auch, L seieine Typ-i-Sprache oder kurz vom Typ i .

Rechtslineare Grammatiken 23/25

Was ist wichtig

Das sollten Sie mitnehmen:

I Definition rechtslineare Grammatiken

Das sollten Sie uben:

I rechtslineare Grammatiken konstruieren(zu gegebenem Akzeptor, regularen Ausdruck, formalerSprache)

Rechtslineare Grammatiken 24/25

Zusammenfassung

I regulare AusdruckeI werden von diversen

”Unix-Tools“ genutzt

I in manchen Programmiersprachen zur Textverarbeitungpraktisch

I rechtslineare Grammatiken

Zusammenfassung 25/25