2010-01-09 8 views
6

Dies ist eher eine Frage der Informatik als eine Programmierung, aber ich denke, dies ist der beste Ort von allen verwandten Seiten, um dies zu fragen.Was ist Regelmäßigkeit?

Als ich Reguläre Ausdrücke entdeckte und den Ausdruck nachschaute, nahm ich an, dass diese Eigenschaft der "Regelmäßigkeit" sich auf die Tatsache bezieht, dass die Sprache des Ausdrucks ein definierbares Strukturmuster hat. Beim Lesen über das Thema und die Theorie dahinter habe ich jedoch gelernt, dass es Arten von Sprachen gibt, die nicht regelmäßig sind, und doch ist klar, dass ein Muster mit ihnen in Übereinstimmung gebracht werden kann. Eine solche Sprache ist (a^n) (b^n). Dies ist eindeutig ein Muster, und doch ist dies keine reguläre Sprache. Jetzt frage ich mich, was ist mit regulären Sprachen, die sie regelmäßig machen, und diese Sprache nicht?

+8

das Produkt einer fasergefüllten Diät? –

+10

Das würdest du wissen, Mitch * Weizen *. –

Antwort

4

Die Etymologie des Namens kommt von Kleenes Arbeit der 1950er Jahre, die reguläre Sätze mit seiner mathematischen Notation beschreibt, die für den Zweck geschaffen wird. Siehe .

+0

@Barry Kelly: Danke für den Tippfehler. Ich wollte zurückgehen und nachsehen. – wallyk

0

Das Wort regular in regular expression bezieht sich auf das mathematische Konzept des regulären, nicht das englische Konzept. Genauso wie das Wort prime in der Mathematik wenig Bezug zu Prime Rindfleisch hat.

Es geerbt von CS (das ist ein Zweig der Mathematik ist) zu einem spezifischeren Konzept vorgelegt: http://en.wikipedia.org/wiki/Regular_language

0

regulärer Ausdruck nicht wirklich regelmäßig ist, ist der Name etymologisch.

+0

Regexp ist normal, aber Regex ist nicht. Insbesondere Regex ist das, was Perl seine Regexp-artige Syntax nennt, um es von der traditionellen Regexp zu unterscheiden. Es gibt Sprachen, die immer noch wirklich reguläre regexp implementieren: tcl und awk, um zwei zu nennen. – slebetman

1

Vielleicht kann der Wikipedia-Artikel auf regular languages es besser erklären, als wir können. Aber ich werde es versuchen.

Aus theoretischer Sicht ist eine reguläre Sprache (Menge von Strings) eine, die mit einem finite state automaton erzeugt werden kann. In der Programmiersprache bedeutet dies, dass es unter Verwendung von regular expressions generiert werden kann. Somit sind alle endlichen Sprachen (Mengen von Strings) regulär, aber es gibt einige unendliche Sprachen, wie z. B. eine Sprache, die nicht unter Verwendung von verwendet werden kann eine FSA oder reguläre Ausdrücke. Es gibt leistungsfähigere Computergeräte (wie zum Beispiel moderne Computer, die unter Verwendung von Turing Machines modelliert werden), die diese Sprachen erkennen können.

Der Grund, warum reguläre Ausdrücke so viel in Programmierung für die Suche nach Zeichenfolgen verwendet wird, ist, dass sie die große Mehrheit der Zeichenfolgen erkennen können, die für uns Programmierer wichtig sind, und gleichzeitig sehr schnell mit endlichen verwendet werden kann Automaten.

+0

Falsch. Regelmäßige Ausdrücke von Programmierern sind normalerweise nicht die Möglichkeit, reguläre Sprachen zu definieren. RegExps sind generischer (da sie alle regulären Sprachen und viele andere Sprachen erkennen können). –

+1

Was? Geben Sie mir ein Beispiel für eine Sprache, die an Regexps von Programmierern erkannt werden kann, aber nicht an theoretischen regulären Ausdrücken. –

+0

Nicht alle Regexp sind Regex. Einige Sprachen implementieren wirklich reguläre Regexp statt eines Klons von Perls Regex. – slebetman

11

Intuitiv zu erklären ist Informatik ... knifflig. Ich werde es versuchen, aber denke daran, dass einiges davon "nahe genug" sein wird, aber nicht theoretisch streng.

Eine reguläre Sprache kann von einer Maschine festgelegt werden, die rechnerisch äquivalent zu einem endlichen Automaten (DFA/NDFA) ist. Ein endlicher Automat kann man sich als eine Maschine vorstellen, die rein in Zuständen arbeitet, keine Speicherung. Sie können also sehen, dass eine Maschine, die die Anzahl der a's und b's (und somit die unendliche * Speicherkapazität) zählen muss, um sie zu vergleichen, nicht regulär sein kann.

Zum Vergleich (abc) nist regelmäßig, weil die Anzahl der Wiederholungen nicht relevant ist.

Für eine strengere (und entsprechend dichtere Ansicht) überprüfen Sie die wikipedia article und verbundenen Seiten.

* Das Unendliche spielt hier keine Rolle, aber ich erwähne es der Vollständigkeit halber. Es könnte einfacher sein, es als "glücklicherweise immer nur genug" Speicher zu betrachten.

+0

+1 für die "Staaten, kein Speicher" Kommentar, habe ich vergessen, das zu erwähnen. –

+5

Ich finde es am einfachsten zu denken: DFA/regulär -> kein Speicher, PDA/CFL -> unbegrenzter Speicher mit eingeschränktem Zugriff, TM -> unbegrenzter Speicher mit wahlfreiem Zugriff –