2016-11-07 4 views
2

In Antlr4 Grammatik muss ich mit Hilfe von Regular Expressions Lateinische, kyrillische, polnische und griechische Buchstaben sowie Sonderzeichen zusammenpassen. Das ist, was ich habe:Antlr4 Spiel Kyrillische, lateinische, polnische und griechische Buchstaben plus Sonderzeichen?

STRING: ['][\p{L} 0-9\[\]\^\$\.\|\?\*\+\(\)\\~`\[email protected]#%&\-_+={}""<>:;,\/°]*[']; 

So bin ich, dass ein String beginnt zu sagen und endet mit ''. Innerhalb kann ich einen beliebigen Buchstaben (\p{L}), Nummer und Sonderzeichen außer ' haben. Ich habe das auf regex101.com getestet und es genau was ich will. Aber in Antlr4 funktioniert es nicht. Stattdessen wird das nächste, was ich bekommen ist:

['][a-zA-Z0-9 \[\]\^\$\.\|\?\*\+\(\)\\~`\[email protected]#%&\-_+={}""<>:;,\/°]*['] 

Aber das Problem ist, dass so etwas wie 'Ąłćórżnęł' nicht in meiner Sprache akzeptiert werden, aber sollte es sein.

Mache ich in Antlr4 etwas falsch oder ist das eine Einschränkung? Wie konnte ich es in Antlr4 zum Laufen bringen? String ist eine Lexer-Regel.

Antwort

3

\p{L} wird von ANTLR nicht unterstützt. Sie müssen diese Bereiche wie folgt von Hand schreiben: [\u1234-\u5678] (ändern Sie \u.... mit Ihren hexadezimalen Unicode-Punkten), wobei \u1234 der Anfang des Bereichs und \u5678 das Ende ist. Beachten Sie, dass Sie mehr als 1 Bereich in Ihren Zeichensatz einfügen können: [\u1234-\u1238\u3456-\u5679].

Danke, aber wie wäre es mit einem regulären Ausdruck in Antlr4, wo ich alles innerhalb eines Strings außer einem Zeichen wie '. Aber ich sage, dass ein String beginnen mit und enden mit "

, die wie folgt aussehen:

STRING : '\'' ~[']* '\''; 

und mit entkam Anführungszeichen und nicht so dass Zeilenumbrüche, dies zu tun:

STRING : '\'' (~['\r\n] | '\\' ['\\])* '\''; 
+0

Danke, aber wie wäre es mit einem regulären Ausdruck in Antlr4, wo ich alles innerhalb eines Strings außer einem Zeichen wie 'erlaube. Aber ich sage, dass eine Saite mit "beginnt" und endet mit "? – Devid

+0

@Devid Überprüfen Sie meine bearbeitete Antwort –

+0

Danke. In Antlr4 habe ich es so gemacht: STRING: ['] (~ ['] | '\' \ '') * [']; – Devid

Verwandte Themen