我使用scala.util.parsing.combinators.Parsers
编写了词法分析器和解析器。至少我的一部作品中有一个错误,但我有很多这样的错误,以至于很难看出它们来确定问题。
我需要的是我的Parser为使输入与任何产品匹配而进行的每次尝试的记录;在实例化时记录所有成功和失败对象将是可爱的。不幸的是,我能看到的唯一方法是扩展库提供的许多基本类,然后重写我的大量解析器来扩展新类。
是否有一种简单的方法来获取此日志记录行为?
答案 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
}
否则,我认为您应该能够覆盖success
和failure
,但这样会非常缺乏信息,因为您不会知道哪些产品称为它们。