Thread Erlaubte "Klammerzeichen" bei Regexen und anderen quote-like-Operatoren
(6 answers)
Opened by GwenDragon at 2021-01-07 16:23
Du meinst die regulären Ausdrücke in Perl? Die sind beschrieben in perlop, "Quote and Quote-like operators".
Dass man dafür eine BNF erstellen kann, bezweifle ich stark... da gibt es einige sehr unangenehme Sonderfälle. Zunächst kann man praktisch jedes Zeichen als Begrenzer definieren. Zwei Beispiele: Code (perl): (dl
)
1 2 3 4 'foo' =~ m#(oo)#; # legal 'foo' =~ m X(oo)X; # legal 'foo' =~ mX(oo)X; # Syntaxfehler 'foo' =~ m #(oo)#; # Syntaxfehler Bei // als Begrenzung stolpern fast alle Highlighter über die Schwierigkeit, eine Division von einer Regex zu unterscheiden. Code (perl): (dl
)
1 2 3 4 $a + /oo/; # Regex, ausgeschrieben $_ =~ /oo/ $a ++ / oo; # Division sin / 25 ; # / ; die "this dies!"; time / 25 ; # / ; die "this doesn't die"; Die letzten beiden Beispiele kommen aus dem vielzitierten Artikel von Randal Schwartz auf Perlmonks. Noch prinzipieller hat Jeffrey Kegler in einer Artikelreihe nachgewiesen, dass man Perl nicht statisch parsen kann. Man muss den Code ausführen, um die syntaktische Korrektheit festzustellen. In Kurzform: Only perl can parse Perl. Man kann sich dem Syntax-Highlighting in Perl nur annähern, indem man bestimmte syntaktisch korrekte Konstruktionen nicht unterstützt. Beispiel: Ich kenne keinen Syntax-Highlighter, der folgenden legalen Code richtig darstellt: UDIAGS. Denn sowas sollte man außer zu Gaudi-Zwecken wie dem don't-Block nicht schreiben. Wenn's sinnvolle oder häufig auftretende Konstruktionen gibt, die ein bestimmter Highlighter falsch macht, dann kannst Du drauf hoffen, dass jemand eine Korrektur findet (ohne an anderer Stelle etwas kaputtzumachen). Aber zur Gänze Perl in JavaScript richtig parsen - das geht wohl kaum. |