Seite 1 von 1

Python Alternative zu RegEx- Pattern Matching a la Snobol4?

Verfasst: Mittwoch 8. Juli 2009, 15:26
von herakles
Hummel Hummel!

ich weiss ja nicht wies euch geht aber ich persönlich bin nicht so wirklich zufrieden mit dem Pattern Matching unter Python. Also es gehört zwar zum besten was ich gesehen / gehört habe unter den Programmiersprachen aber da ist noch Luft nach oben.

Es wird ja gemunkelt, dass das Pattern Matching bei der kaum bekannten Programmiersprache Snobol4 / Spitbol deutlich überlegen sein soll und eine wahre Freude im Vergleich zu RegEx.

Deswegen meine Fragen:

1. Wieso hat Python RegEx gewählt? Aufgrund der hohen Verbreitung durch Perl usw?

2. Bestehen Bemühungen dazu das Snobol4 Pattern Matching in Python einzuarbeiten?

3. Entspricht diese überlegenheit von Snobol4 gegenüber RegEx tatsächlich der Realität? Wenn ja: Welche konkreten Beispiele könnt ihr nennen wo Snobol4 gegenüber RegEx im Vorteil ist?

Danke für eure Mühe!

Verfasst: Mittwoch 8. Juli 2009, 20:54
von CM
Mors, Mors,

interessante Thema, von Snobol4 hatte ich noch nie was gehört. Aber, um ehrlich zu sein: Nachdem ich ein bißchen was gelesen hatte, bin ich nicht überzeugt, dass es wirklich einfacher ist, als Pythons regexes (Plural? / Beugung? ;-) ). In puncto Effiziens scheint zumindest Tim Peters große Stücke auf Snobol zu halten. Aber so ganz überzeugt bin ich nicht. Mag mich wer überzeugen? ;-)

Eine Pythonbindung existiert bereits. Ist zwar veraltet, aber wenn es Dich interessiert, kannst Du ja es ja für Python 3.x umsetzen: Mit SWIG dürfte das kein Problem sein, dass sich nicht lösen liesse.

Mal aus Neugierde: Gibt es neuere / bessere Bindings? edit: Gibt es Python-bindings für (noch) "bessere" / andere Pattern Matching engines?

Gruß,
Christian

Verfasst: Mittwoch 8. Juli 2009, 23:11
von Leonidas
Hängt ab wie man nun Pattern Matching meint. Stringbasiertes Matching? Oder Matching wie in OCaml, Haskell oder Scala? Oder wie Multimethods? Oder wie die syntax-rules Makros aus Scheme?

Verfasst: Donnerstag 9. Juli 2009, 15:37
von herakles
CM hat geschrieben:
[...]

Eine Pythonbindung existiert bereits. Ist zwar veraltet, aber wenn es Dich interessiert, kannst Du ja es ja für Python 3.x umsetzen: Mit SWIG dürfte das kein Problem sein, dass sich nicht lösen liesse.

Mal aus Neugierde: Gibt es neuere / bessere Bindings? edit: Gibt es Python-bindings für (noch) "bessere" / andere Pattern Matching engines?

Gruß,
Christian
"Gibt es neuere / bessere Bindings? edit: Gibt es Python-bindings für (noch) "bessere" / andere Pattern Matching engines?"

-> Gerade das interessiert mich auch.

---------------------
"Die Sprache SNOBOL 4 unterstützt eine Reihe von eingebauten Datentypen wie Integer- und Gleitkommazahlen, Zeichenketten, Mustern, Feldern und Tabellen. Darüber hinaus gestattet sie dem Programmierer die Definition von zusätzlichen Datentypen und neuen Funktionen.

Ein wesentliches Unterscheidungsmerkmal zu den seinerzeit gebräuchlichen Programmiersprachen ist die Existenz von Mustern als "erstklassigem" Datentyp, d.h. einem Datentyp, dessen Wert in jeder Weise manipuliert werden kann wie in anderen Programmiersprachen, sowie von Operatoren zur Verkettung und Manipulation von Mustern. Zeichenketten, die zur Laufzeit erzeugt werden, können als Programm behandelt und ausgeführt werden. Ein Muster in SNOBOL 4 kann sehr einfach, aber auch sehr komplex aufgebaut sein. Ein einfaches Muster ist z. B. nur eine Zeichenkette wie "ABCD". Ein komplexes Muster kann hingegen eine große Struktur sein, die z. B. die vollständige Grammatik einer Computersprache beschreiben kann."
http://de.wikipedia.org/wiki/SNOBOL4
---------------------

Verfasst: Donnerstag 9. Juli 2009, 16:11
von CM
Na ja, Leonidas hat schon recht: Die Frage muß man entsprechend eingrenzen, sonst machen wir hier einen Megathread draus. Also, was mich anbelangt, so denke ich an stringbasiertes Matching.

Und die Frage nach der Qualität von Snobol halte ich im Übrigen nicht für abschließend beantwortet: Mit "es wird gemunkelt" und wikipedia-Zitaten, bin ich nicht überzeugt - der Source-Code ist auch nicht überzeugend. Aber vielleicht gibt es etwas, das ich übersehe - und interessant ist es allemal.

Gruß,
Christian - in diesem Punkt ahnungslos, aber neugierig ;-)

Verfasst: Samstag 11. Juli 2009, 09:47
von sma
Ich vermute mal, dass die meisten Programmiersprachen reguläre Ausdrücke benutzen, weil die anderen Sprachen sie auch benutzen und daher dem Benutzer die doch anfangs recht kryptische Syntax schon bekannt sein könnte.

Eine gute alternative RE-Engine soll Oniguruma sein, die schon gar keine reguläre Sprache mehr ist, sondern z.B. Klammern zählen kann (siehe \g) und damit eigentlich kontextfrei sein müsste. So genau überblicke ich das allerdings nicht.

Die Sprache REBOL kann direkt kontextfreie Grammatiken als interne DSL verarbeiten, was recht nett ist. Ansonsten ist REBOL allerdings als eher unbekannt (auch wenn sie von dem Amiga-Erfinder stammt). Ich glaube, damit ist sie mit Snobol4 vergleichbar.

Ansonsten meine ich, dass doch auch Perl6 nicht nur reguläre Ausdrücke beherrscht sondern auch Syntax für kontextfreie Grammatiken als interne DSL in der Sprache hat, oder?

Stefan

Verfasst: Montag 13. Juli 2009, 15:24
von mkesper
Ich fände eine String-Methode multisplit() schon ganz fein. :)

Verfasst: Montag 13. Juli 2009, 21:49
von birkenfeld
sma hat geschrieben:Eine gute alternative RE-Engine soll Oniguruma sein, die schon gar keine reguläre Sprache mehr ist, sondern z.B. Klammern zählen kann (siehe \g) und damit eigentlich kontextfrei sein müsste. So genau überblicke ich das allerdings nicht.
Wenn du gerne 3x so lange auf deinen Match für simple REs wartest wie mit sre, ist Oniguruma auf jeden Fall etwas für dich :D

Verfasst: Dienstag 14. Juli 2009, 10:12
von lunar
Wer sowas einsetzt, fühlt sich eh zu höherer RE-Magie berufen, die Laufzeit ist da doch völlig egal ;)