Scala 2.9:有一种简单的方法来记录所有ParseResults吗?

时间:2012-12-04 21:54:05

标签: parsing scala

我使用scala.util.parsing.combinators.Parsers编写了词法分析器和解析器。至少我的一部作品中有一个错误,但我有很多这样的错误,以至于很难看出它们来确定问题。

我需要的是我的Parser为使输入与任何产品匹配而进行的每次尝试的记录;在实例化时记录所有成功和失败对象将是可爱的。不幸的是,我能看到的唯一方法是扩展库提供的许​​多基本类,然后重写我的大量解析器来扩展新类。

是否有一种简单的方法来获取此日志记录行为?

1 个答案:

答案 0 :(得分:2)

您可以使用log组合器来包装语法的制作。这是Parsers.scala中的定义:

def log[T](p: => Parser[T])(name: String): Parser[T] = Parser{ in =>
  println("trying "+ name +" at "+ in)
  val r = p(in)
  println(name +" --> "+ r)
  r
}

否则,我认为您应该能够覆盖successfailure,但这样会非常缺乏信息,因为您不会知道哪些产品称为它们。