JavaScript-Regex mit ANTLR analysieren

9

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?

    
erikkallen 31.08.2012, 08:59
quelle

1 Antwort

5

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%     
sbridges 03.09.2012, 05:28
quelle

Tags und Links