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:
'foo' =~ m
'foo' =~ m X(oo)X;
'foo' =~ mX(oo)X;
'foo' =~ m
Bei
// als Begrenzung stolpern fast alle Highlighter über die Schwierigkeit, eine Division von einer Regex zu unterscheiden.
$a + /oo/; # Regex, ausgeschrieben $_ =~ /oo/
$a ++ / oo;
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:
use 5.010;
sub geht's {
say "es geht!"
}
geht's;
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.