Parsing Scala packrat解析器

Parsing Scala packrat解析器,parsing,scala,Parsing,Scala,我对Scala 2.8中介绍的Packrat解析器combinator有一些问题 不幸的是,除了Scaladoc PackratParsers的特征描述,我找不到任何关于如何使用这个新特性的教程,这个描述相当简短。是否有可能收到使用它的示例 事实上,我在Scala没有经验。我在尝试使用packrat解析器时发现的第一个问题是实现packrateder类。Scaladoc说程序员应该像新的packrateder(new-lexical.Scanner(“input”))一样手动创建这个对象。因此,

我对Scala 2.8中介绍的Packrat解析器combinator有一些问题

不幸的是,除了Scaladoc PackratParsers的特征描述,我找不到任何关于如何使用这个新特性的教程,这个描述相当简短。是否有可能收到使用它的示例

事实上,我在Scala没有经验。我在尝试使用packrat解析器时发现的第一个问题是实现packrateder类。Scaladoc说程序员应该像新的packrateder(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")) )) } } 成套工程 导入scala.util.parsing.combinator_ 类MyParser使用packratParser扩展了JavaTokenParser{ lazy val expr:PackratParser[Any]=ident~“+”~ident } 对象测试应用{ def main(参数:数组[字符串]){ val myParser=新的myParser println(myParser.parse( myParser.expr, 新的Packrateder(新的词法扫描程序(“x+y”)) )) } } 编译器给出了错误信息:

error: not found: type PackratReader new PackratReader(new lexical.Scanner("x+y")) 错误:未找到:类型packrateder 新的Packrateder(新的词法扫描程序(“x+y”)) 因此,我的第二个问题是关于如何实现(或实例化,如果可能的话)Packrateder。此外,我还对如何实例化trait的内部类感兴趣,比如前面的问题中提到的packrateder

我的最后一个问题是如何将Packrat解析器和常规Scala的解析器组合器一起使用。ScaladoС说:“它们可以在单一语法中与常规解析器自由混合”。您还可以解释一下不提供备忘录的常规解析规则将如何影响支持它的packrat规则吗


谢谢。

类Packrateder
嵌套在
trait Packrater
中。您需要在
PackratParsers
trait的特定实例的上下文中实例化它。我会将“普通”的
读取器
传递给
MyParser
构造函数,这样就可以在那里实例化
packrateder

谢谢你,Randall!当Packrat和常规解析器一起使用时,你能解释一下记忆问题吗?@Eliah:我还没有探讨Scala 2.8中的Packrat解析添加,所以我不能在这一点上为你提供任何帮助。有一个描述Packrat解析在Scala中的实现(附示例)。