我开发了一个成功的翻译器,它使用ANTLR4语法和解析树监听器。我对使用ANTLR成功完成这个项目的快速成功感到非常满意,并且刚刚开始将基于ANTLR4的解决方案的二进制输出与较慢的传统C ++代码体进行比较。 (我的解决方案是针对速度的,所以即使它用Java实现也可能更快)。
但是,当我开始使用更大的110Mb输入ASCII文件进行测试时,我发现我的HEAP耗尽了。这发生在ANTLRInputStream实例化期间。 我相信我可以解决UnbufferedChar / Token流。这个stackoverflow question也表明应该关闭解析树的生成,因为解析树会消耗大量的内存。
如果我关闭解析树生成,则不会调用我的解析树监听器。至少这是我理解它的方式。我怀疑我将无法管理翻译1Gb文件并生成解析树监听器。解决方案是什么?
如果可以的话,我想避免将我的ParseTreeListener代码移动到语法文件中。