Python Alternative zu RegEx- Pattern Matching a la Snobol4?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
herakles
User
Beiträge: 5
Registriert: Mittwoch 8. Juli 2009, 15:08

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!
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
herakles
User
Beiträge: 5
Registriert: Mittwoch 8. Juli 2009, 15:08

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
---------------------
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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 ;-)
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Ich fände eine String-Methode multisplit() schon ganz fein. :)
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
lunar

Wer sowas einsetzt, fühlt sich eh zu höherer RE-Magie berufen, die Laufzeit ist da doch völlig egal ;)
Antworten