Cスタイルの複数行のコメント(つまり、/* ... */
)をScalaパーサーのコンビネータで(効率的に)解析する最良の方法は何ですか?Scala Parser Combinators:効率的にCスタイルのコメントを解析する
私が関与しているプロジェクトでは、Cのようなプログラミング言語を解析し、複数行のコメントをサポートしたいと考えています。我々はStdLexical
を経由して(すでに、このようなコメントを取り扱うStandardTokenParsers
のサブクラスを使用しています。しかし、クラスは唯一のかなり短い複数行のコメントのために働く、とそうでない場合は、スタック領域が不足。
我々はまた、私たち自身の定義を提供しようとしています
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]]
}
// ...
}
これは少し状況が改善したが、コメントは数十行以上であれば、まだスタックオーバーフローが発生します。空白の次のように我々は(another question on StackOverflowに触発さ)RegexParser
を使用し、物事をより効率的にします。どのようにこれを改善するためのアイデア?