def record: Parser[Record] = "-" ~ opt(recordLabel) ~ repsep(column, ",") ^^ {
case "-" ~ label ~ columns => new Record(label, columns)
}
假设在repsep(column,“,”)部分,它们意外地生成了这样一个字符串
a, b, c, d,
这是无效的,因为它以“,”结尾,这不应该存在。与其让解析器在调用parseAll()时停止,不如让它抛出一个人类可读的有意义的异常?(自定义文本、行号等)
编辑:好的,我找到了一些有用的东西,但是我对它的可定制性不满意:
def loadFrom(filename: String) {
val source =
Source.fromFile(filename).getLines.mkString("\n")
val parseResult = parseAll(tables, source)
if(!parseResult.successful) {
throw new TestDataParseException(parseResult.toString)
}
}
toString会打印一条好消息,但是当它找到一个空格时,它会打印一些奇怪的东西,比如wanting“\z”(有时在我的IDE中看起来像一个块/正方形)。我宁愿说,“嘿,你忘了一个逗号!”
行号/列确实以[x.y]的形式打印出来。实际上,我想展示[行:x,列:y],因为人们会更直观地知道这是什么。
谢谢