我在使用 ANLTR3 生成解析器时遇到了 OutOfMemoryError,堆空间似乎主要填充有 NFA/DFA 状态(准确地说是 org.antlr.analysis.NFAConfiguration 对象)。
假如说:
- 通过重写语法规则不能大大减少前瞻预测所需的状态总数(实际上:这将是另一个问题)
- 增加堆空间不是一种选择(因为已经使用了很多并且语法只有其估计大小的 60%)
可以拆分语法帮助,因为:
- DFA/NFA 状态的总数可能会以某种方式减少(真的不要指望这个)
- 或者每个语法的 DFA/NFA 状态的数量会更少,并且一旦生成了一个语法,它的 DFA/NFA 状态就会被丢弃?