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
后面的左括号匹配的地方停止。