gpt4 book ai didi

antlrworks - 如何在ANTLR 4字符串匹配中排除“和\?

转载 作者:行者123 更新时间:2023-12-01 01:08:26 24 4
gpt4 key购买 nike

我有以下字符串要与规则 stringLiteral 匹配:

"D:\\Downloads\\Java\\MyFile"

而我的语法是文件:String.g4,如下:
grammar String;

fragment
HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;

stringLiteral
: '"' ( EscapeSequence | XXXXX )* '"'
;
fragment
EscapeSequence
: '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
| UnicodeEscape
| OctalEscape
;

fragment
OctalEscape
: '\\' ('0'..'3') ('0'..'7') ('0'..'7')
| '\\' ('0'..'7') ('0'..'7')
| '\\' ('0'..'7')
;

fragment
UnicodeEscape
: '\\' 'u' HexDigit HexDigit HexDigit HexDigit
;

为了匹配任何不是\或 "的字符,我应该在 XXXXX 位置放什么?

我尝试了以下方法,但都不起作用:
~['\\'"']
~['\\'\"']
~["\]
~[\"\\]
~('\"'|'\\')
~[\\\"]

我正在使用 ANTLRWorks 2 来尝试这个。错误如下:
D:\Downloads\ANTLR\String.g4 line 26:5 mismatched character '<EOF>' expecting '"'
error(50): D:\Downloads\ANTLR\String.g4:26:5: syntax error: '<EOF>' came as a complete surprise to me while looking for rule element

最佳答案

在字符类中,您只需要转义反斜杠:

以下是非法 ,它逃脱了 ] :

[\]

以下匹配反斜杠:
[\\]

以下匹配引用:
["]

以下匹配反斜杠或引号:
[\\"]

在 v4 样式中,您的语法可能如下所示:
grammar String;

/* other rules */

StringLiteral
: '"' ( EscapeSequence | ~[\\"] )* '"'
;

fragment
HexDigit
: [0-9a-fA-F]
;

fragment
EscapeSequence
: '\\' [btnfr"'\\]
| UnicodeEscape
| OctalEscape
;

fragment
OctalEscape
: '\\' [0-3] [0-7] [0-7]
| '\\' [0-7] [0-7]
| '\\' [0-7]
;

fragment
UnicodeEscape
: '\\' 'u' HexDigit HexDigit HexDigit HexDigit
;

请注意,您不能在解析器规则中使用片段: StringLiteral必须是词法分析器规则!

关于antlrworks - 如何在ANTLR 4字符串匹配中排除“和\?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16872664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com