Scala编程:解析器组合器与GUI开发
1. 解析器组合器
在解析器组合器中,有一个字段 lastFailure
用于记录解析过程中的最后一次失败信息。其初始值为 None
,在 Failure
类的构造函数中会对其进行更新:
var lastFailure: Option[Failure] = None
case class Failure(msg: String, in: Input) extends ParseResult[Nothing] {
if (lastFailure.isDefined && lastFailure.get.in.pos <= in.pos)
lastFailure = Some(this)
}
phrase
方法会读取 lastFailure
字段,如果解析器失败,它会发出最终的错误消息。以下是 phrase
方法在 Parsers
特质中的实现:
def phrase[T](p: Parser[T]) = new Parser[T] {
lastFailure = None
def apply(in: Input) = p(in) match {
case s @ Success(out, in1) =>
if (