System.Text.RegularExpressions.Regex
ソースファイルからのC/C ++インクルードの解析に使用するC#ソフトウェアを移植しています。それらは文字列としてメモリに完全にロードされ、正規表現で処理されます。
Windowsでは完全に機能しますが、Linuxで実行されているMonoは、内部の奥深くからスローされたスタックオーバーフロー例外を使用して、より大きなファイルを解析しようとすると失敗しますSystem.Text.RegularExpressions.Interpreter
。
コードは完全に正しいです-それはWindowsで動作します。
スタックサイズを増やす方法はありますか?それとも、大きなファイルを小さなチャンクに分割する必要が本当にありますか?
編集:問題の正規表現は次のようになります:
/** Regex that matches #include statements. */
static Regex CPPHeaderRegex = new Regex( "(([ \t]*#[ \t]*include[ \t]*[<\"](?<HeaderFile>[^\">]*)[\">][^\n]*\n)|([^\n]*\n))*",
RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.ExplicitCapture );
問題の原因となるソースは300kB(〜8k SLOC)以上です。
これは私のコードではないことに注意してください。私はそれを継承しました。