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



我有下面的字符串,我想匹配的规则,stringLiteral:

"D:\Downloads\Java\MyFile"

我的语法是file: 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:DownloadsANTLRString.g4 line 26:5 mismatched character '<EOF>' expecting '"'
error(50): D:DownloadsANTLRString.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必须是词法分析器规则!

相关内容

  • 没有找到相关文章

最新更新