我使用 scala.util.parsing.combinators.Parsers
编写了词法分析器和解析器。我的作品中至少有一个错误,但我有太多错误,很难通过观察它们来确定问题所在。
我需要的是我的解析器为将输入与任何产生式相匹配所做的每一次尝试的日志;在实例化时记录所有 Success 和 Failure 对象会很可爱。不幸的是,我能看到的唯一方法是扩展库提供的许多基本类,然后重写我的大型解析器以扩展新类。
是否有一种简单的方法来获得这种日志记录行为?
最佳答案
您可以使用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
,但这将无法提供任何信息,因为您不知道生产调用它们的是什么。
关于parsing - 斯卡拉 2.9 : is there an easy way to log all ParseResults?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13712632/