大きな C コード ファイル (>9000 LoC) があり、次の文法を使用して解析しようとしています。
https://github.com/antlr/grammars-v4/blob/master/c/C.g4
中止するまで1時間以上待ちました。マシンは、4GB の RAM を搭載した Core 2 Duo L9400 です。最大 Java vm-heap-size は 2GB に設定されています。解析エラーは発生しませんが、単に終了しません。
いくつかの調査を行った後、予測モードを SLL に設定しました。これは、数秒以内に「入力時に実行可能な代替手段がない」ものを生成します。
次に、予測モードを LL_EXACT_AMBIG_DETECTION に設定し、DiagnosticErrorListener をパーサーにアタッチしました。これにより、主に宣言/宣言指定子に関する多くの「あいまいなレポート」が生成されます。これにより、パーサーが非常に頻繁にバックトラックを余儀なくされると思いますが、これはおそらく長い解析時間の説明ですか?
文法を書き直す以外に、パフォーマンスを改善するためにできることはありますか?
どんな助けでも大歓迎です;)