2010-08-25 161 views
2

我對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的解析器組合。斯卡拉多說:「他們可以在一個語法中免費混合常規解析器」。你能否解釋一下不提供記憶法的常規解析規則是如何影響支持它的軟件包規則的?

謝謝。

+1

有一個[技術報告](http://scala-programming-language.1934581.n4.nabble.com/attachment/1956909/0/packrat_parsers.pdf)描述了Scala中的Packrat分析的實現(帶有示例) 。 – 2012-01-07 16:02:53

回答

3

class PackratReader嵌套在trait PackratParsers。您需要在PackratParsers特徵的特定實例的上下文中將其實例化。我將「普通」Reader傳遞給構造函數MyParser,以便PackratReader可以在那裏實例化。

+0

謝謝Randall! 你能不能也解釋了記憶化問題,當Packrat和定期解析器一起使用? – 2010-08-27 16:27:42

+0

@Eliah:我還沒有探究Scala 2.8中的packrat解析附加內容,因此我無法爲您提供任何幫助。 – 2010-08-27 16:59:02