如何使用ANTLR4多次重写令牌流

如何使用ANTLR4多次重写令牌流,antlr,token,antlr4,Antlr,Token,Antlr4,我使用伟大的ANTLR4库实现了简单的预处理器。程序本身在几个迭代中运行——在每个迭代中,未来的输出都会稍微修改 目前我使用及其方法delete,insertAfter,replace和getText 不幸的是,我无法重写以前重写过的令牌(GetIllegalArgumentException)。但根据多重替换法,这无论如何都无法实现 我认为存在一个适当的解决方案,因为这似乎是一个常见的问题。谁能给我个提示吗?我宁愿使用一些现有的和经过测试的解决方案,也不愿重新实现重写器本身 也许重写器不是合适

我使用伟大的ANTLR4库实现了简单的预处理器。程序本身在几个迭代中运行——在每个迭代中,未来的输出都会稍微修改

目前我使用及其方法
delete
insertAfter
replace
getText

不幸的是,我无法重写以前重写过的令牌(Get
IllegalArgumentException
)。但根据多重替换法,这无论如何都无法实现

我认为存在一个适当的解决方案,因为这似乎是一个常见的问题。谁能给我个提示吗?我宁愿使用一些现有的和经过测试的解决方案,也不愿重新实现重写器本身

也许重写器不是合适的工具


感谢您的帮助

pull请求满足您的需求吗?我必须承认,我不明白为什么ANTLR,一个可以构建树的非常好的解析引擎,建议重写令牌流是一个好主意。为什么不重写这些树呢?这些树至少是持久的,在您更改它们之后,您仍然拥有整个树,因此您可以根据自己的喜好再次执行此操作。即使你坚持重写令牌流,为什么你不能重写不止一次(可能是因为它是一个流,令牌已经过去了;也许它应该是一个令牌数组?)。这很有趣,但根据问题追踪者的说法,下一个版本可能会带来此功能。。。无论如何,我阅读了TokenStreamRewriter的源代码,它实际上提供了重写代码的重写,当它全部包含在新关系中时,我可以接受它that@IraBaxter:在某些情况下,有必要重写令牌流,例如宏替换,因为如果不替换令牌,甚至不可能构建解析树。尽管操纵这些树的选项是一个很好的补充。