ANLTR 4 in einem einzigen String in Anführungszeichen zwei gleiche Zeichen in einer Lexer Regel zu negieren 'Das wird zusätzliche Parsing benötigen. Daher müssen beide Beispiele unterstützt werden. Ich bin nicht so besorgt um das zweite Beispiel, denn das scheint trivial zu sein, wenn ich das erste zum Laufen bringen kann und nicht doppelte geschweifte Klammercharaktere.Grammar
1. 'this is a string literal with an escaped\' character' 2. 'this is a string {{functionName(x)}} literal with double curlies'
StringLiteral
: '\'' (ESC | AnyExceptDblCurlies)*? '\'' ;
fragment
ESC : '\\' [btnr\'\\];
fragment
AnyExceptDblCurlies
: '{' ~'{'
| ~'{' .;
ich viel Forschung auf diesem getan haben und verstehen, dass Sie nicht mehrere Zeichen negieren können, und haben auch einen ähnlichen Ansatz Arbeit in Barts Antwort in diesem Beitrag nicht gesehen ...
Negating inside lexer- and parser rules
Aber was ich sehe ist, dass im obigen Beispiel 1, das entwichene Apostroph wird nicht erkannt wird und ich einen Parser-Fehler erhalten, dass es nicht ‚Charakter‘ mithalten kann.
, wenn ich die Stringliteral Token-Regel das ändern folgende es funktioniert ...
StringLiteral
: '\'' (ESC | .)*? '\'' ;
Irgendwelche Ideen, wie man dieses Szenario behandeln besser? Ich kann ableiten, dass der Escape-Zeichen von AnyExceptDblCurlies statt ESC abgeglichen wird, aber ich bin mir nicht sicher, wie dieses Problem zu lösen ist.
müssen Sie wirklich den Inhalt eines String-Literals zu diesem Zeitpunkt tokenisieren? Sie sagen nicht, welche Art von Grammatik Sie verwenden; Ich denke an Sprachen wie C oder C#, die normalerweise das Parsen von Literalen zu Laufzeitfunktionen, printf, String.Format und dergleichen lassen – dlatikay
@dlatikay, ich muss in der Lage sein, den Fall zu analysieren, wo das Literal '{{x} enthält } ', so kann ich nicht bis zur Laufzeit verzögern. Schlägst du vor, dass es einfacher ist, diesen Fall auf Parser-Regelebene zu behandeln? – ichrisnichols
Ich sehe ... ja, Parser-Regel> es erinnert mich an [diese] (http://stackoverflow.com/questions/1850468/parsing-string-interpolation-in-antlr) – dlatikay