parsing - 斯卡拉 2.9 : is there an easy way to log all ParseResults?

标签 parsing scala

我使用 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
}

否则,我认为您应该能够覆盖 successfailure,但这将无法提供任何信息,因为您不知道生产调用它们的是什么。

关于parsing - 斯卡拉 2.9 : is there an easy way to log all ParseResults?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13712632/

相关文章:

scala - @field注解的使用

scala - 从一个衬垫创建多个新实例

java - 最佳实践 : catching failure points in java.net.URL

scala - Cats 效应和异步 IO 细节

c++ - 使用 getline 和 stringstream 检查句子中的单词是否在文件中

java - 用于宽容命令解释器的最佳 Java 库

parsing - 是否有给定 ANTLR 语法的实用程序将生成匹配的字符串?

java - Google PubSub Java (Scala) 客户端收到过多的重发消息

c++ - 从字符数组中解析文件名

python - 为什么 BeautifulSoup 重新格式化我的 XML?