Scala ayrıştırıcı kombinatorleri ile C stili çok satırlı yorumların (yani /* ... */
) ayrıştırılmasının (verimli bir şekilde) en iyi yolu nedir?Scala Ayrıştırıcılar Kombinasyonları: Verimli Ayrıştırma C-Style Yorumlar
Katıldığım bir projede C benzeri bir programlama dilini ayrıştırıyoruz ve çok satırlı yorumları desteklemeyi istiyoruz. Zaten StdLexical
yoluyla (örneğin bir yorum kolları StandardTokenParsers
bir alt sınıfı, kullanıyoruz. Ancak, sınıf yalnızca oldukça kısa çok hatlı yorumlar için çalışır ve aksi yığın alanı yetersiz çalışır.
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]]
}
// ...
}
Bu biraz durumu düzeldi ama açıklama birkaç düzine çizgi değildir eğer hala yığın taşması olur. boşluğa şöyle (another question on StackOverflow esinlenerek) bir RegexParser
kullanılan şeyler daha verimli hale getirmek. Bunu geliştirmek için herhangi bir fikir?