我對Scala的2.8呈現Packrat解析器組合的一些問題。斯卡拉packrat解析器
可惜的是我沒能找到如何使用這項新功能除外Scaladoc PackratParsers特徵描述,這是相當短的任何教程。有可能獲得使用它的例子嗎?
其實,我在斯卡拉沒有的experiance。我嘗試使用packrat解析器時發現的第一個問題是實現PackratReader類。 Scaladoc說,程序員應該像新的PackratReader(new lexical.Scanner(「input」))手動創建這個對象。所以我寫了下面:
package proj import scala.util.parsing.combinator._ class MyParser extends JavaTokenParsers with PackratParsers { lazy val expr: PackratParser[Any] = ident ~ "+" ~ ident } object TestApplication { def main(arguments: Array[String]) { val myParser = new MyParser println(myParser.parse( myParser.expr, new PackratReader(new lexical.Scanner("x+y")) )) } }
,編譯器給了錯誤:
error: not found: type PackratReader new PackratReader(new lexical.Scanner("x+y"))
因此,我的第二個問題是如何實現(或實例如果可能的話)PackratReader。除此之外,我還有興趣如何實例化特殊的內部類,比如PackratReader,在前面提到的問題中提到過?
我的最後一個問題是如何使用起來Packrat解析器和定期Scala的解析器組合。斯卡拉多說:「他們可以在一個語法中免費混合常規解析器」。你能否解釋一下不提供記憶法的常規解析規則是如何影響支持它的軟件包規則的?
謝謝。
有一個[技術報告](http://scala-programming-language.1934581.n4.nabble.com/attachment/1956909/0/packrat_parsers.pdf)描述了Scala中的Packrat分析的實現(帶有示例) 。 – 2012-01-07 16:02:53