Parsing Scala2.9:有没有一种简单的方法来记录所有解析结果?

Parsing Scala2.9:有没有一种简单的方法来记录所有解析结果?,parsing,scala,Parsing,Scala,我已经使用scala.util.parsing.combinator.Parsers编写了一个lexer和解析器。我的至少一部作品中有一个bug,但我的作品太多了,很难通过观察来确定问题所在 我需要的是一个日志,记录我的解析器将输入与任何产品匹配的每次尝试;在实例化所有成功和失败对象时记录它们会很好。不幸的是,我能看到的唯一方法是扩展库提供的许多基本类,然后重写我的大型解析器来扩展新类 有没有一种简单的方法可以获得这种日志记录行为?您可以使用logcombinator来包装语法的结果。以下是Pa

我已经使用
scala.util.parsing.combinator.Parsers
编写了一个lexer和解析器。我的至少一部作品中有一个bug,但我的作品太多了,很难通过观察来确定问题所在

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


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

您可以使用
log
combinator来包装语法的结果。以下是
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
}

否则,我认为您应该能够覆盖
成功
失败
,但这将是非常缺乏信息的,因为您不知道生产部门如何称呼它们。

您可以发布您的体系结构的简要概述(包含一些代码)吗?我不明白这一点。这是一个关于使用
解析器及其提供的类的一般性问题,而不是修复语法。