Im Laufe der Jahre, "Regex" Mustererkennung wurde immer leistungsfähiger zu dem Punkt, wo ich frage mich: Ist es wirklich nur kontextsensitiv-Grammatik-Abgleich? Ist es eine Variation/Erweiterung der kontextfreien Grammatik? Wo ist es jetzt und warum nennen wir es nicht einfach den alten, restriktiven "regulären Ausdruck"?Ist "Regex" in modernen Programmiersprachen wirklich "kontextsensitive Grammatik"?
Antwort
Insbesondere Rückreferenzen zum Erfassen von Klammern machen reguläre Ausdrücke komplexer als normale, kontextfreie oder kontextsensitive Grammatiken. Der Name ist einfach historisch gewachsen (so viele Wörter). Siehe auch this section in Wikipedia und dieses explanation with an example von Perl.
So wie ich es sehe:
- Reguläre Sprachen:
- von Zustandsmaschinen abgestimmt. Es kann nur eine Variable verwendet werden, um den aktuellen „Ort“ in der Grammatik darstellen zu angepasst werden:
- durch einen Stapelmaschine Matched: Rekursion kann nicht
- Kontextfreie Sprachen implementiert werden. Der aktuelle "Ort" in der Grammatik wird durch einen Stapel in der einen oder anderen Form dargestellt. Kann nicht "erinnern" alles, was
- von Zustandsmaschinen abgestimmt. Es kann nur eine Variable verwendet werden, um den aktuellen „Ort“ in der Grammatik darstellen zu angepasst werden:
- Kontextsensitive Sprachen vor aufgetreten:
-
AlleDie meisten menschlichen Sprachen
Ich weiß von regelmäßigen
- Die meisten Programmiersprachen Ausdrucksparser, die es Ihnen ermöglichen, mit etwas zu vergleichen, das der Parser bereits kennengelernt hat, und so etwas wie einen Kontext zu erreichen nsitive Grammatik.
Dennoch erlauben reguläre Ausdrucksparser, so ausgeklügelt sie auch sein mögen, keine rekursive Anwendung von Regeln, was eine unabdingbare Voraussetzung für kontextfreie Grammatiken ist.
Der Begriff regex, meiner Meinung nach, bezieht sich vor allem auf die Syntax verwendet, um diese regulären Grammatiken (die Sterne und Fragezeichen) auszudrücken.
Lookahead/Lookbehind und Benennungen fügen definitiv etwas hinzu, das außerhalb von regulären regulären Ausdrücken liegt - Speicher. Sind wir nicht auf PDA-Ebene? – notnot
Es ist im allgemeinen nicht wahr, dass die natürliche Sprache kontextsensitive ist, siehe http://www.eecs.harvard.edu/~shieber/Biblio/Papers/shieber85.pdf –
ah, das ist die guten Sachen – notnot
Es gibt Funktionen in modernen Regular Expression-Implementierungen, die die Regeln der classic regular expression definition brechen.
Zum Beispiel Microsoft’s .NET Balancing Group(?<
name1
-
name2
> …)
:
^(?:0(?<L>)|1(?<-L>))*(?(L)(?!))$
Diese tut die Sprache entsprechen L ₀₁ = {ε, 01, 0011, 000111, ...}. Aber diese Sprache ist gemäß der Pumping Lemma nicht regelmäßig.
Ich weiß, dass es über den klassischen Regex hinausgeht, aber ich frage mich, wie viel weiter. Fabians Link oben ist interessant. – notnot
- 1. Kontextsensitive Grammatik für diese Sprache
- 2. kontextsensitive Hilfe in Webanwendung
- 3. ist Javascript 'Rückkehr' wirklich ein * Keyword *?
- 4. Kann jemand ein einfaches aber nicht-Spielzeug Beispiel für eine kontextsensitive Grammatik geben?
- 5. ist diese Grammatik mehrdeutig
- 6. Kontextsensitive Menüs - Java ME
- 7. SIMD Programmiersprachen
- 8. Kulturelle Probleme in Programmiersprachen
- 9. Sortieren in funktionalen Programmiersprachen
- 10. Endianness in Programmiersprachen
- 11. Ist JSON Hijacking immer noch ein Problem in modernen Browsern?
- 12. Mousewheel-Ereignis in modernen Browsern
- 13. Programmiersprache Grammatik
- 14. Wie Raytracing in modernen OpenGL?
- 15. Ist .NET-Codeverschleierung wirklich lohnend?
- 16. Ist Magento wirklich opensource?
- 17. Ist CDATA wirklich notwendig?
- 18. Ist SVG wirklich skalierbar :)?
- 19. Ist das wirklich DDD?
- 20. Ist keine wirklich eingebaut?
- 21. Was ist wirklich Atom?
- 22. Häufigkeit von Symbolen in Programmiersprachen
- 23. Ist SQLite wirklich plattformübergreifend?
- 24. Algorithmus zur Generierung kontextfreier Grammatik aus beliebigen Regex
- 25. Chained Ungleichheit Notation in Programmiersprachen
- 26. Wofür ist EditorReuseAttribute wirklich?
- 27. Ist Void wirklich uninstallierbar?
- 28. Ist "safe_eval" wirklich sicher?
- 29. Was ist gl_ModelViewMatrix und gl_ModelViewProjectionMatrix in modernen OpenGL?
- 30. In modernen Browsern, was ist die Notwendigkeit für socket.io?
Könnten Sie bitte den Unterschied zwischen "regulärer Sprache" und "regulärem Ausdruck" erklären? –
Ist es wirklich mächtiger als CSG? Kannst du ein Beispiel geben? – notnot
Eine reguläre Sprache kann durch eine reguläre Grammatik beschrieben werden (siehe http://en.wikipedia.org/wiki/Regular_grammar), während reguläre Ausdrücke eine Mustersprache sind, die weniger eingeschränkt und daher komplexer zu verarbeiten ist. –