Die meisten modernen Implementierungen von regulären Ausdrücken, wie die in Perl oder .NET, gehen mit Funktionen wie Lookahead und Lookbehind über die klassische computerwissenschaftliche Definition von REGEXes hinaus. Lassen diese Funktionen Anweisungen analysieren, die mit einem endlichen Nicht-Pushdown-Automaten nicht beschrieben werden können? Wie viel näher an Turing abgeschlossen wird dies machen sie, wenn sie können?
19
Antworten:
Ich glaube nicht, dass das eigentliche Problem die Frage ist, was unbegrenzt bedeutet. Dies ist nicht schlimmer als jede andere Situation beim Parsen.
Das Problem liegt in der Charakterisierung von Rückreferenzen, die sowohl sehr leistungsfähig als auch sehr begrenzt sind: Sie ermöglichen die Beschreibung einiger nicht kontextfreier Sprachen, ohne dass einige kontextfreie Sprachen zugelassen werden. Beispielsweise entspricht der reguläre Ausdruckeinn⋅ b ⋅ an⋅ b ⋅ an
(a*)b\1b\1
Zeichenfolgen der Form , und Sie können das Pump-Lemma verwenden, um zu zeigen, dass dies keine kontextfreie Sprache ist. Andererseits scheinen reguläre Ausdrücke mit Rückwärtsreferenzen nicht ausreichend zu sein, um mit der ausgeglichenen Klammersprache übereinzustimmen, die die prototypische kontextfreie Sprache ist.Es ist leicht genug, Regexen eine denotationale Semantik zu geben, die besagt, welche Zeichenfolgen in einer Sprache vorhanden sind, aber eine gute automaten-theoretische Charakterisierung scheint viel schwieriger zu sein. Es ist so etwas wie eine Registermaschine, in deren Register Sie Teilzeichenfolgen Ihrer Eingabe kopieren und anhand derer Sie Ihre aktuelle Zeichenfolge testen können, für die Sie diese Register jedoch nicht ändern können.
Leute, die Finite-Modell-Theorie betreiben, haben eine Menge funky Maschinenmodelle, und es wäre interessant zu wissen, ob dies einem ihrer Modelle entspricht.
quelle
Das Problem bei der Beantwortung dieser Frage ist die Erfassung des Begriffs der „unbegrenzten“ in einer tatsächlichen Implementierung. Zum Beispiel die RegexL = { w w | w ∈ & Sigma;∗} w K LK= { w w | w ∈ & Sigma;∗, | W | & le; K} K
/(.*)\1/
wird die Sprache erfassen , welche nicht kontextfrei ist. In der Praxis gibt es möglicherweise Beschränkungen für den verwendeten Stapel (dh kann möglicherweise nicht länger als eine große Zahl ), wodurch die Sprache effektiv in , das für jeden festen wieder ein regulärer Ausdruck ist.w K L K = { w w | w & egr ; & Sgr; * , | w | & le; K } KAber im Prinzip regexps wie angegeben sind mächtiger als reguläre Sprachen, wie diese Frage im Zusammenhang bespricht in viel mehr ins Detail (mit einem geschickten Beispiel auch).
quelle
Ein interessantes Ergebnis aus dieser anderen Frage , die auch von Suresh Venkat gestellt wurde, ist, dass "praktische" reguläre Ausdrücke NP-vollständig sind und daher der Leistung von SAT entsprechen sollten.
Als Nicht-Experte stimme ich zwar zu, dass intuitiv "Regexes mit Rückverweisen nicht ausreichend zu sein scheinen, um der ausgeglichenen Klammersprache zu entsprechen", aber es ist etwas Seltsames im Gange. Die NP-Vollständigkeit impliziert, dass jedes NP-Problem polynomisch auf einen regulären Ausdruck reduziert werden kann, sodass es wahrscheinlich nur eine polynomische Reduktion von der Sprache der "ausgeglichenen Klammern" auf eine mit regulären Ausdrücken erkennbare gibt. Aber auch hier kann es absurde reguläre Ausdrücke geben, um eine CFL zu analysieren, da sie sogar unäre Zahlen ohne Primzahlen analysieren können!
Wahrscheinlich ist die Lehre, dass Komplexitätsklassen und Sprachklassen im Allgemeinen nicht vergleichbar sind. Was auch nahe legt, Ihre Frage neu zu formulieren, um auf die Chomsky-Hierarchie und nicht auf die "Komplexitätsskala" zu verweisen (auch wenn ich, um ehrlich zu sein, nicht verwirrt war).
Charles Stewart schreibt:
Eine Teilvorschau (zumindest der Aussage) finden Sie in Google Books auf Seite 289, und ein bibliografischer Verweis auf das Papier finden Sie hier . Beachten Sie, dass in diesem Artikel rewbr für Regular Expression With BackReferences steht.
quelle
PCRE, die populärste Implementierung von „regulären Ausdrücken“ auch Geräte rekursive Muster, die über Rückreferenzierungen gehen. Eine Frage über ihre Komplexität wird gerade gefragt bei Stackoverflow. Nach der Ausführungs-in-depth-Antwort von Perl - Guru Brian D Foy, macht diese PCRE so mächtig wie kontextfreie Grammatiken. Die Syntax ist jedoch schrecklich im Vergleich zu Backus-Naur Form.
quelle