ANTLR 4解析器匹配任何令牌

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ANTLR 4解析器匹配任何令牌相关的知识,希望对你有一定的参考价值。

快速提问(希望如此)。

我希望我的解析器接受两个特定令牌之间的任何令牌。

所以在我的特定情况下它看起来像这样:

XPATH: 'xpath';

BRACKET_OPEN: '(';

BRACKET_CLOSED: ')';

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

我已经尝试制作一个ANY: .;令牌,但要么永远不匹配或匹配。


所以我希望规则xpathvar匹配xpath( anything here, even special chars()!$[]!)

谢谢你的帮助^^

答案

你可以这样做:

xpathvar
 : XPATH parens
 ;

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

其中~( BRACKET_OPEN | BRACKET_CLOSED )匹配任何令牌(不是任何角色!),除了BRACKET_OPENBRACKET_CLOSED

以上是关于ANTLR 4解析器匹配任何令牌的主要内容,如果未能解决你的问题,请参考以下文章

编写自定义表达式解析器或使用ANTLR库?

ANTLR快餐教程 - ANTLR其实很简单

Antlr4 - 多行文件解析器 -

ANTLR4入门:使用mave ANTLR4插件(antlr4-maven-plugin)执行语法解析生成器

ANTLR4入门:使用mave ANTLR4插件(antlr4-maven-plugin)执行语法解析生成器

为什么解析器中的单独字符包含在令牌中?