Ich habe eine ANTLR-JavaScript-Grammatik (aus dem Internet), die scheinbar alles außer Regex-Literalen unterstützt.
Das Problem mit einem Regex-Literal besteht darin, dass Sie zwei Regeln haben, im Wesentlichen:
%Vor%und
%Vor%Dabei verwendet die Regel RegexLiteralChar andere Lexer-Regeln als ein normaler Ausdruck (z. B. wird durch einen doppelten Anführungsstrich nicht beendet).
Das bedeutet, dass ich in irgendeiner Weise einen Lexer-Zustand von meinem Parser ändern muss. Wie kann ich das machen? Ist es überhaupt möglich?
Wenn Sie sich die Grammatik ansehen, die im Kommentar von Bart Kiers hier erwähnt wird, können Sie diesen Kommentar sehen,
Die wichtigsten Herausforderungen bei der Definition dieser Grammatik waren:
-1- Mehrdeutigkeit, die das DIV-Zeichen in Bezug auf den multiplikativen Ausdruck und das Literal des regulären Ausdrucks umgibt. Das ist mit lexergesteuerter Magie gelöst: ein gated semantisches Prädikat aktiviert oder deaktiviert die Erkennung von regulären Ausdrücken basierend auf der Wert der RegularExpressionsEnabled-Eigenschaft. Wenn regelmäßig Ausdrücke sind aktiviert sie haben Vorrang vor der Division Ausdrücke. Die Entscheidung, ob reguläre Ausdrücke aktiviert sind, ist basierend auf den Heuristiken, dass der vorherige Token als betrachtet werden kann letztes Token eines linken Operanden einer Division.
...
Die areRegularExpressionsEnabled () -Funktion ist definiert als
%Vor%Und dann wird die Funktion im RegularExpressionLiteral-Ausdruck verwendet,
%Vor%Tags und Links javascript antlr