ANLTR3 でパーサーを生成しているときに OutOfMemoryError に遭遇しました。ヒープ スペースは主に NFA/DFA 状態 (正確には org.antlr.analysis.NFAConfiguration オブジェクト) でいっぱいになっているようです。
仮定して:
- 先読み予測に必要な状態の総数は、文法規則を書き直しても大幅に減らすことはできません (実際には、これは別の問題になります)。
- ヒープ領域を増やすことはオプションではありません (すでに大量に使用されており、文法は推定サイズの 60% しかないため)
文法を分割すると、次のいずれかの理由で役立つ可能性があります。
- DFA/NFA 状態の合計量は、どういうわけか少なくなる可能性があります (実際には、これを期待しないでください)。
- または、文法ごとの DFA/NFA 状態の量が少なくなり、文法が生成されると、その DFA/NFA 状態は破棄されますか?