/* ... */
Scala パーサー コンビネーターを使用してC スタイルの複数行コメント (つまり、) を (効率的に) 解析する最良の方法は何ですか?
私が関与しているプロジェクトでは、C に似たプログラミング言語を解析しており、複数行のコメントをサポートしたいと考えています。のサブクラスを使用しますがStandardTokenParsers
、これは既にそのようなコメントを ( 経由で) 処理していますStdLexical
。ただし、このクラスはかなり短い複数行のコメントに対してのみ機能し、それ以外の場合はスタック スペースが不足します。
また、物事をより効率的にするために、独自の空白の定義を提供しようとしました。次のように ( StackOverflow に関する別の質問にRegexParser
触発されて)を使用しました。
class Parser extends StandardTokenParsers {
override val lexical = new StdLexical {
def rp: RegexParsers = new RegexParsers {}
override val whitespace: Parser[Any] = rp.regex("""(\s|//.*|(?m)/\*(\*(?!/)|[^*])*\*/)*""".r).asInstanceOf[Parser[Any]]
}
// ...
}
これにより、状況はわずかに改善されましたが、コメントが数十行を超えるとスタック オーバーフローが発生します。これを改善する方法はありますか?