Wo fallen die meisten REGEX Implementierungen von der Komplexität Skala?


19

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?


2
Eine eng verwandte Frage: Haben wir etwas Interessantes zwischen "Regexen mit Rückverweisen" und "Regexen, die beliebigen Programmcode enthalten können"? Sind beispielsweise reguläre Ausdrücke mit Rückverweisen und Lookahead / Lookbehind strikt aussagekräftiger als reguläre Ausdrücke mit Rückverweisen, aber ohne Lookahead / Lookbehind? Was ist "Special Backtracking Steuer Verb" in Perl?
Jukka Suomela

Verwandte (und möglicherweise falsch): stackoverflow.com/questions/2974210/...
Aryabhata

Antworten:


18

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 Ausdruck (a*)b\1b\1Zeichenfolgen 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.anbanban

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.


9

Das Problem bei der Beantwortung dieser Frage ist die Erfassung des Begriffs der „unbegrenzten“ in einer tatsächlichen Implementierung. Zum Beispiel die Regex /(.*)\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 } KL={ww|wΣ}wKLK={ww|wΣ,w∣≤K}K

Aber 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).


Wäre das nicht {ww | w ∈ Σ *, |w|≤K} wäre eine CSL oder TM erkennbar sein ??
dhruvbird

arggh. getan haben ww ^ R sollte. wird reparieren. Dank
Suresh Venkat

Eigentlich hatte ich eine Frage dazu. Ist ww einer CSL oder Turing erkennbar? Ich war (noch) nicht der Lage , mit einem LBA für sie zu kommen, so frage mich ...
dhruvbird

1
Wenn die Länge uneingeschränkt ist, die Kopier Sprache ist kontextsensitiv. (Es ist sogar "leicht kontextsensitiv", ein Begriff, der in letzter Zeit in der Verarbeitung natürlicher Sprache an Bedeutung gewonnen hat.) Eine kontextsensitive Grammatik (und damit eine LBA) ist nicht leicht zu finden, kann aber in gefunden werden viele Lehrbücher und Lehrmaterial auf der Bahn (verwenden Sie eine Suchmaschine für „Kopie Sprache kontextsensitive“). {ww:wΣ}
DaniCL

5

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:

Aho, 1990, "Algorithmen zum Auffinden von Mustern in Strings" zeigt, dass das Mitgliedschaftsproblem für reguläre Sprachen mit Backtracking NP vollständig ist.

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.


3

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.