我对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