ANTLR 4解析器匹配任何令牌

ANTLR 4解析器匹配任何令牌,antlr,antlr4,Antlr,Antlr4,快速提问(希望如此) 我希望解析器接受两个特定标记之间的任何标记 所以在我的特殊情况下,它看起来是这样的: XPATH: 'xpath'; BRACKET_OPEN: '('; BRACKET_CLOSED: ')'; xpathvar : XPATH BRACKET_OPEN (any token or char between here) BRACKET_CLOSED ; xpathvar : XPATH parens ; parens : BRACKET_OPEN


快速提问(希望如此)

我希望解析器接受两个特定标记之间的任何标记

所以在我的特殊情况下,它看起来是这样的:

XPATH: 'xpath';

BRACKET_OPEN: '(';

BRACKET_CLOSED: ')';

xpathvar
:
    XPATH BRACKET_OPEN (any token or char between here) BRACKET_CLOSED
;
xpathvar
 : XPATH parens
 ;

parens
 : BRACKET_OPEN ( ~( BRACKET_OPEN | BRACKET_CLOSED ) | parens )* BRACKET_CLOSED
 ;
我已经试过做一个
ANY:标记,但该标记从未匹配或始终匹配


所以我希望规则
xpathvar
匹配
xpath(这里的任何内容,甚至是特殊字符()!$[]!)


感谢您的帮助^^

您可以这样做:

XPATH: 'xpath';

BRACKET_OPEN: '(';

BRACKET_CLOSED: ')';

xpathvar
:
    XPATH BRACKET_OPEN (any token or char between here) BRACKET_CLOSED
;
xpathvar
 : XPATH parens
 ;

parens
 : BRACKET_OPEN ( ~( BRACKET_OPEN | BRACKET_CLOSED ) | parens )* BRACKET_CLOSED
 ;

其中
~(BRACKET\u OPEN | BRACKET\u CLOSED)
匹配任何标记(不是任何字符!),除了
BRACKET\u OPEN
BRACKET\u CLOSED
之外,您可以在解析器规则中使用
来匹配任何标记,但这并不能完全帮助您,因为如果您想允许括号在其中,你得想办法数一数
*
*?
将分别在最后一个或第一个右括号处停止,但实际上您希望在与
XPATH
后面的左括号匹配的地方停止。