3

我已经使用scala.util.parsing.combinators.Parsers. 我的作品中至少有一个错误,但我有太多的错误,以至于很难通过眼球来确定问题。

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

有没有一种简单的方法来获得这种日志记录行为?

4

1 回答 1

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
}

否则,我认为您应该能够覆盖successand failure,但这将提供相当多的信息,因为您不知道生产调用它们的内容。

于 2012-12-05T08:38:32.993 回答