400 likes | 546 Views
Überführung regulärer Ausdrücke in endliche Automaten Der Algorithmus von Glushkov und McNaughton/Yamada. Karin Haenelt 14.5.2010. Inhalt. Quelle Prinzip des Algorithmus Algorithmus Parsing des regulären Ausdrucks Erkennung Syntaxbaum
E N D
Überführung regulärer Ausdrücke in endliche AutomatenDer Algorithmus von Glushkov und McNaughton/Yamada Karin Haenelt 14.5.2010
Inhalt • Quelle • Prinzip des Algorithmus • Algorithmus • Parsing des regulären Ausdrucks • Erkennung • Syntaxbaum • Funktionen nullable, firstpos, lastpos und followpos • Konstruktion des Automaten • Ein linguistisches Beispiel • Implementierung • Komplexität
Quelle • Der Algorithmus wurde unabhängig entwickelt von • Viktor M. Glushkov (1960, 1961) • Robert McNaughton und Hisao Yamada (1960)
Inhalt • Quelle • Prinzip des Algorithmus • Algorithmus • Parsing des regulären Ausdrucks • Erkennung • Syntaxbaum • Funktionen nullable, firstpos, lastpos und followpos • Konstruktion des Automaten • Ein linguistisches Beispiel • Implementierung • Komplexität
Prinzip des Algorithmus • bestimmte Positionen des regulären Ausdrucksstehen inbestimmten Folgerelationen in den zugehörigen Zeichenketten • die Folgerelationen sind eindeutig bestimmt über • die Abfolge und • Definition der Operatoren des regulären Ausdrucks • die Folgerelationen legen die Menge der möglichen Zustände und die zeitliche Ordnung der Zustände fest • es geht also darum • die Folgerelationen zu berechnen • aus dem Ergebnis der Berechnung den DEA zu konstruieren
Prinzip des AlgorithmusBeispiel -1- RE = dete? adje* nomn REp = dete?1adje*2nomn3#4 wie sehen dieZeichenketten aus,die dieser Ausdruck beschreibt? welchem Zeichen kann welches Zeichen folgen?
Prinzip des AlgorithmusBeispiel -2- RE = dete? adje* nomn REp = dete?1adje*2nomn3#4 adje2 dete1 adje2(da dete1optional ist) nomn3(dete1 und adje2opt.) dete1 adje2 nomn3 dete1 nomn3 adje2 adje2 nomn3 #4 nomn3 dete1 adje2 nomn3 #4 adje2,nomn3 adje2, nomn3 #4 - • mögliche Startpositionen • mögliche Folgepositionen
Prinzip des AlgorithmusBeispiel -3- RE = dete? adje* nomn REp = dete?1adje*2nomn3#4 adje2 dete1 adje2 nomn3 dete1 nomn3 adje2 adje2 nomn3 #4 adje2 nomn3 dete1 nomn3 1,2,3 2,3 4 adje2 nomn3
Prinzip des AlgorithmusBeispiel -4- 1,2,3 Startzustand aus Positionsmenge {1,2,3} • Start- und Folgepositionen sind eindeutig bestimmt durch die Semantik der Operatoren • Wenn E= dete? adje* nomnin eine Zeichenkette aus L(E) umgewandelt wird, kann das erste Zeichen der Zeichenkette sein • dete weil es vorne steht • adje wegen des ?-Operators über dete • nomn wegen des Stern-Operators über adje
Prinzip des Algorithmus • Wie berechnet man die Start- und Folgepositionen? • Erkennung des Ausdrucks mit dem Algorithmus von Hopcroft/Ullman 1988 • Aufbau eines binären Syntaxbaumes • Blätter: Positionen • innere Knoten: Operatoren • Berechnung der Abfolgen während der bottom-up-Konstruktion des Syntaxbaumes • Wie erzeugt man den Automaten? • auf der Basis der Abfolgeinformation nach dem Algorithmus von Glushkov bzw. MacNaughton/Yamada
Inhalt • Quelle • Prinzip des Algorithmus • Algorithmus • Parsing des regulären Ausdrucks • Erkennung • Syntaxbaum • Funktionen nullable, firstpos, lastpos und followpos • Konstruktion des Automaten • Ein linguistisches Beispiel • Implementierung • Komplexität
Der Syntaxbaum ● (a1|b2)*a3b4b5#6 ● # 6 ● b 5 ● b 4 * a 3 | a b 1 2 Aho/Sethi/Ullmann 1986: 139
Die Funktionennullable, firstpos, lastpos und followpos Der Automat wird aufgebaut aus den Ergebnissen von firstpos(root) und followpos(i) Zur Ermittlung von followpos(i)wird firstpos(n) und lastpos(n) benötigt Zur Ermittlung von firstpos(n) und lastpos(n)wird nullable(n) benötigt nullable(n) ist knotenspezifisch definiert Die Funktionen werden bottom-up auf den Syntaxbaum angewendet
Die Funktionennullable, firstpos, lastpos und followpos Aho/Sethi/Ullmann 1986: 138 Def Sei E der Teilausdruck, der durch den Syntaxbaum mit Wurzel n repräsentiert wird, und E’ ein regulärer Ausdruck, in dem jedes Symbol durch seine Position ersetzt ist, dann ist
| • c1 c1 c2 c2 Die Berechnung der Funktionennullable, firstpos, lastpos und followpos * c1
Der annotierte Syntaxbaum {1,2,3} ● {6} (a1|b2)*a3b4b5#6 {1,2,3} ● {5} {6} # {6} 6 nullable {1,2,3} ● {4} {5} b {5} 5 {1,2,3} ● {3} {4} b {4} 4 {1,2} * {1,2} {3} a {3} 3 {1,2} | {1,2} firstpos lastpos {1} a {1} {2} b {2} 1 2 Aho/Sethi/Ullmann 1986: 139
| • c1 c1 c2 c2 * c1 Berechnung von followpos n
Beispiel zur Berechnung von followpos:Stern-Knoten (a|b)* followpos(1).addAll( {1,2}) followpos(2).addAll ({1,2}) n {1,2} * {1,2} {1,2} | {1,2} followpos(1) = {1,2} followpos(2) = {1,2} {1} a {1} {2} b {2} 1 2
Beispiel zur Berechnung von followpos:Konkatenations-Knoten (a|b)*a n followpos(1).addAll( {3}) followpos(2).addAll ({3}) {1,2,3} ● {3} {1,2} * {1,2} {3} a {3} 3 {1,2} | {1,2} followpos(1) = {1,2,3} followpos(2) = {1,2,3} {1} a {1} {2} b {2} 1 2
a a 1 b b b # 3 4 5 6 a 2 b b b 1,2,3,6 1,2,3 1,2,3,4 1,2,3,5 a b b a a a Konstruktion der Automaten aus den followpos-Mengen NEA DEA Aho/Sethi/Ullmann 1986: 136-140
Algorithmus von Gluskov bzw. McNaughton/Yamada: Konstruktion des DEA Aho/Sethi/Ullmann 1986: 141
DEA b2 b2 1,2,3 1,2,3,4 1,2,3,5 1,2,3,6 a1,a3 b2,b4 b2,b5 a1,a3 a1,a3 a1,a3
Inhalt • Quelle • Prinzip des Algorithmus • Algorithmus • Parsing des regulären Ausdrucks • Erkennung • Syntaxbaum • Funktionen nullable, firstpos, lastpos und followpos • Konstruktion des Automaten • Ein linguistisches Beispiel • Implementierung • Komplexität
nullable {i} firstpos {i} lastpos Ein linguistisches Beispiel, 1a dete? adje* nomn {1,2,3,4} ● {5} • Variante 1: • Darstellung von a? durch (a|ε) • bei Automatenkonstruktion werden für εkeine Kanten konstruiert (nur für Eingabe- Symbole a) {1,2,3,4} ● {4} {5} {5} # 5 {1,2,3} ● {1,2,3} {4} {4} nomn 4 {1,2} | {1,2} {3} * {3} {1} {1} { } { } {3} {3} dete ε adje 1 3 2
nullable {i} firstpos {i} lastpos Ein linguistisches Beispiel, 1b dete? adje* nomn {1,2,3} ● {4} Variante 2: direkte Angabe von Regeln für ?: nullable(n) := true firstpos (n) := firstpos(left) lastpos(n) := lastpos(left) {1,2,3} ● {3} {4} {4} # 4 {1,2} ● {1,2} {3} {3} nomn 3 {1} {1} ? {2} * {2} {1} {1} {2} {2} dete adje 1 2
adje adje adje adje 1,2,3 1,2,3,4 2,3 3,4 4 5 dete dete nomn nomn start start nomn nomn Ein linguistisches Beispiel, 2a+b dete? adje* nomn Variante 2 für ? Variante 1 für ?
Inhalt • Quelle • Prinzip des Algorithmus • Algorithmus • Parsing des regulären Ausdrucks • Erkennung • Syntaxbaum • Funktionen nullable, firstpos, lastpos und followpos • Konstruktion des Automaten • Ein linguistisches Beispiel • Implementierung • Komplexität
Implementierung • Einfügen der Konstruktionsschritte für einen Parsebaum bzw. Syntaxbaum • Zuordnung von Baumkonstruktoren zu den Elementen des regulären Ausdrucks • Terminalsymbole (Zeile 21) • Klammern (Zeile 23, 27) • unäre Operatoren (*,+,?) (Zeile 31) • binäre Operatoren (·, |) (Zeile 4, 13) * |
Definition der Knoten, 1 Brüggemann-Klein, 1992
Definition der Knoten, 2 Brüggemann-Klein, 1992
Definition der Knoten, 3 Brüggemann-Klein, 1992
Inhalt • Quelle • Prinzip des Algorithmus • Algorithmus • Parsing des regulären Ausdrucks • Erkennung • Syntaxbaum • Funktionen nullable, firstpos, lastpos und followpos • Konstruktion des Automaten • Ein linguistisches Beispiel • Implementierung • Komplexität
Komplexität: Platz • maximale Anzahl der Zustände: 2p+1,p = Anzahl der Positionen • (Anzahl möglicher Teilmengen, die aus p Objekten gebildet werden können, beträgt 2p) • max. Anzahl wird in der Praxis kaum erreicht: • der reg. Ausdruck schränkt Anzahl der möglichen Teilmengen sehr stark ein • Algorithmus konstruiert nur die tatsächlich vorkommenden Teilmengen(lazy implementation der Teilmengen) • minimale Anzahl der Zustände: p+1(falls nur Konkatenation von Symbolen vorkommt) Glushkov, 1961 McNaughton/Yamada, 1960
Komplexität: Zeit • Implementierungen mit kubischer Zeit • Aho/Sethi/Ullman, 1986 • Berry/Sethi, 1986 • Implementierung mit quadratischer Zeit für allgemeine Ausdrücke (d.h. auch ambige) • Brüggemann-Klein, 1992 • Implementierung mit linearer Zeit für deterministische Ausdrücke • Brüggemann-Klein, 1992
Literatur • Quellen • Glushkov, Viktor M.(1961). The abstract theory of automata. In: Russian Mathematical Surveys 16, S. 1-53. • Glushkov, Viktor M.(1960). On Synthesis Algorithm for Abstract Automata, Ukr. Mathem. Zhurnal, 12(2), S.147-156 (in Russisch) • McNaughton, Robert und Hisao Yamada (1960). Regular expressions and state graphs for automata. In IEEE Transactions on Electronic Computers 9 (1): S. 39-47. • Erläuterungen • Aho, Alfred V.; Sethi, Ravi und Jeffrey D. Ullman (1986). Compilers. Principles, Techniques and Tools. Addison-Wesley Publishing Company. • weitere Literatur • Berry, Gérard und Ravi Sethi (1986). From regular expressions to deterministic automata. In: Theoretical Computer Science 48 (3), S. 117-126. • Brüggemann-Klein, Anne (1992). Regular Expressions into Finite Automata, Proceedings of Latin '92, 1st Latin American Symposium on Theoretical Informatics, São Paulo, Brazil, April 6-10, 1992. (Lecture Notes in Computer Science 583) Heidelberg: Springer Verlag.
Versionen • 14.05.2010, 9.5.2010, 14.09.2007, 05.05.2007, 21.05.2006, 20.03.2005