用Scala解析器组合器(有效)解析C样式多行注释(即/* ... */
)的最佳方式是什么?Scala解析器组合器:有效地解析C-Style注释
在我参与的一个项目中,我们解析了一个C语言的编程语言,并且想要支持多行注释。我们使用的StandardTokenParsers
一个子类,其中已经处理了这些意见(通过StdLexical
,但该类只适用于相当短的多行注释,并运行了,否则堆栈空间。
我们也试图提供我们自己的定义空白,使事情变得更加高效,我们使用了RegexParser
(由another question on StackOverflow启发)如下:
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]]
}
// ...
}
这略有好转,但仍导致堆栈溢出如果注释是比几十行了。任何想法如何改善?