用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]]
}
// ...
}
這略有好轉,但仍導致堆棧溢出如果註釋是比幾十行了。任何想法如何改善?