首页 > 解决方案 > Antlr4 TokenStreamRewriter 删除行中 X 后的令牌

问题描述

我正在使用 Antlr4 9.2 并有以下语言翻译查询。

每一行文字!想要的是 66 个字符,其余的我想丢弃。大胆的东西。

''************************************************ **************'' 17002700006873 *

''* £ACT£X 0603170027 A 001 C 001 D 001 '' 17002700006874

如何编写删除 66 个字符后的字符的 TokenStreamRewriter?在这些到达标记器之前?

标签: tokenantlr4

解决方案


TokenStreamRewriter 作用于由标记器创建的 TokenStream,因此它不会作用于标记器之前的任何内容。

我假设您需要标记前 66 个字符的内容。您可能应该考虑使用一些预处理来截断每一行,然后将该输入交给标记器。

虽然您可以使用不同的、非常简单的标记器,首先标记化,然后使用 TokenStreamRewriter 重写一个新的字符流以传递给“真正的”标记器,但这实际上只是一种非常“折磨”的写作方式一个循环逐行读取输入,并且只将前 66 个字符写入新流,然后您可以对其进行标记。

TokenStreamRewriters 是非常方便的工具,可以获取现有的 tokenStream 并操作内容以生成新的 String(它们不会生成新的 TokenStream)


推荐阅读