Javaソースファイル内のすべての複数行コメントを一致させる際に、私はStackOverflow()
エラーに遭遇します。一致したコメントがかなり大きいときに起こります。私は多かれ少なかれ2500文字までの限界を突き止めましたが、これは私の環境に固有のものかもしれません。Rascalの正規表現マッチのサイズに制限はありますか?
私がコメントを一致させるために、次の式を使用しています:
/<comment:((\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/))+>/mi
は、私が知っておくべき試合の大きさにはいくつかの制限があり、または私の正規表現に問題があるのでしょうか?
私のスタックトレースは次のようになります。それは、文字列内の同じ位置に一致する選択肢が含まれてい*
-quantifiedキャプチャグループが含まれているよう
|project://Sevo1/src/Volume.rsc|(985,32,<53,12>,<53,44>): StackOverflow()
at countLines(|project://Sevo1/src/Volume.rsc|(985,33,<53,12>,<53,45>))
at $root$(|prompt:///|(0,73,<1,0>,<1,73>))
を閉じますマッチ自体のサイズに制限はありません。問題は、StackOverflowエラーを引き起こすバックトラックが多すぎる最適以下のパターンにあります。それは適切な要約ですか? –
これは実際に問題があることを確認するためにスタックトレースを見るのに役立ちます。改良されたreは問題をより早く現われるだろうが、Java正規表現とRascal仮想マシン/インタプリタへの翻訳との間に、Rascal固有のマッピング問題が存在する可能性がある。 – jurgenv
@RubenSteinsまあ、マッチのサイズは確かにマッチを保持する可変型のサイズによって制限されます。しかし、私はあなたに長い間コメントがあるとは思いません。 –