Python-Syntax-Highlighter

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
lunar

mitsuhiko hat geschrieben:
lunar hat geschrieben:Allerdings innerhalb eines Zustandsautomaten, denn gerade Dinge wie Strings mit maskierten Anführungszeichen darin lassen sich mit regulären Ausdrücken nur schwerlich abbilden.
Python's Reguläre Ausdrücke sind aber auch keine.
Inwiefern?
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

lunar hat geschrieben:
mitsuhiko hat geschrieben:Python's Reguläre Ausdrücke sind aber auch keine.
Inwiefern?
Die können Backrefs, Lookaheads und alles mögliche was mit einem NFA nicht möglich ist.

Unabhängig davon spricht nichts dagegen Strings mit Regulär Expressions inkl. Escapes zu matchen:

Code: Alles auswählen

string_re = re.compile(r"('([^'\\]*(?:\\.[^'\\]*)*)'"
                       r'|"([^"\\]*(?:\\.[^"\\]*)*)")(?s)')
TUFKAB – the user formerly known as blackbird
lunar

mitsuhiko hat geschrieben:
lunar hat geschrieben:
mitsuhiko hat geschrieben:Python's Reguläre Ausdrücke sind aber auch keine.
Inwiefern?
Die können Backrefs, Lookaheads und alles mögliche was mit einem NFA nicht möglich ist.
Ich hatte dein vorletztes Posting so verstanden, dass du behaupten wolltest, Python's reguläre Ausdrücke wäre in Wirklichkeit keine regulären Ausdrücke. Insofern erscheint es mir gerade etwas irreführend, reguläre Ausdrücke mit Zustandsautomaten zu vergleichen...
Unabhängig davon spricht nichts dagegen Strings mit Regulär Expressions inkl. Escapes zu matchen:

Code: Alles auswählen

string_re = re.compile(r"('([^'\\]*(?:\\.[^'\\]*)*)'"
                       r'|"([^"\\]*(?:\\.[^"\\]*)*)")(?s)')
Dagegen spricht die Lesbarkeit.
BlackJack

Reguläre Ausdrücke und endliche Automaten sind äquivalent. Irreführend ist, die Bezeichnung reguläre Ausdrücke für dass was Programmiersprachen bzw. regex-Engines alles können. Jedenfalls für theoretische Informatiker. :-)
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

lunar hat geschrieben:

Code: Alles auswählen

string_re = re.compile(r"('([^'\\]*(?:\\.[^'\\]*)*)'"
                       r'|"([^"\\]*(?:\\.[^"\\]*)*)")(?s)')
Dagegen spricht die Lesbarkeit.
Die spricht immer gegen Regex ;)
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Leute, ich gebe auf ;) Ich verspreche, nicht mehr Code direkt im Webbrowser zu schreiben... das geht nach hinten los.

Ich habe eben noch schnell das Erkennen von gequoteten Anführungszeichen in String gefixt (für den Fall, dass irgendjemand später einmal den Code einfach copy&pasted und ich nicht ganz so blöd dastehe) aber das soll's dann gewesen sein. Der zweite Ansatz erkennt leider nicht die Worte hinter `def` und `class`, weil das ein weiterer Denkfehler war, aber egal, ich mache da jetzt nichts weiter. Ich müsste hier eine state maschine benutzen, die nach bestimmten Token umschaltet. Pygments geht so vor und kann dadurch doc-strings erkennen. Immer noch kein traditioneller Parser, immer nur noch reguläre Ausdrücke...

Stefan

Edit (Leonidas): Restliche Diskussion nach "Emacs-Modes mischen" abgetrennt.
Antworten