这是一种用 ANTLR 拆分字符的方法吗?

Is it a way to split chars with ANTLR?

我正在尝试将 ANTLR 翻译器从 Markdown 格式转换为 HTML 文档,当我尝试识别粗体格式时发现了这个问题。这是我的 ANTLR 规则:
TxtNegrita : ('**' | '__') .*? ('**' | '__') {System.out.println('<span class="bold">' + getText() + '</span>');};
不幸的是,getText() 函数检索所有已识别的字符串,包括字符串开头和结尾的 **。这是一种使用 ANTLR 删除字符的方法吗(显然,在 Java 中是完全可能的)。

谢谢!

您已经创建了一个 Lexer 规则,它产生了一个标记。这是预期的行为。

该规则看起来更像我期望的解析器规则。

(规则以大写字符开头(通常全部大写以使它们脱颖而出),解析器规则以小写字母开头并生成解析树,其中每个节点都有一个上下文,使您可以访问你的解析器规则。

在 ANTLR 中,了解 Lexer 规则和解析器规则之间的区别非常重要。

简单地说...您的输入字符流使用 Lexer 规则转换为输入标记流,并且该标记流由解析器规则处理。

令牌几乎是解析器规则处理的“原子”,它们的值只是与 Lexer 规则匹配的字符串。