使用ANTLR分析包含单引号的引号之间的字符串

问题描述 投票:1回答:1

我希望能够用ANTLR4解析像“test'test”这样的字符串

我的语法:

QUOTE: ('\''|'"');
STRING: QUOTE .*? QUOTE;

我的解析器:

matcher: STRING;

在另一篇文章中提出了以下可能性:Handling scope for single and double quote strings in ANTLR4

语法 :

SQUOTE: '\'';
DQUOTE: '"';

STRING: (SQUOTE .*? SQUOTE | DQUOTE .*? DQUOTE );

但是,这种可能性会产生冗余,从而在维护期间产生风

这就是为什么我想知道是否有可能找到相当于正则表达式:

("|').*?(\1)

也就是说,自动搜索与开始标记相同类型的结束标记

antlr4
1个回答
1
投票

不,("|').*?(\1)是不可能的。我也不会做.*?,但是这样的话:

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

或者,如果您允许转义字符:

STRING
 : '"' ( ~["]* | '\\' . )* '"'
 | '\'' ( ~[']* | '\\' . ) '\''
 ;

另请注意,~["]*也符合换行符。如果您不想这样做,请执行以下操作:~["\r\n]*

© www.soinside.com 2019 - 2024. All rights reserved.