我一直在让 scala 组合器解析器(特别是通过 JavaTokenParsers 的 RegexParsers)在整数和浮点数之间做出决定时遇到问题。我必须在这里遗漏一些非常基本的东西,因为我似乎无法在任何地方找到任何提及这个特定问题的内容。我已经在有问题的解析器代码中包含了一个规范(当然,减去了)。
@RunWith(classOf[JUnitRunner])
class SandboxSpec extends FlatSpec with ShouldMatchersForJUnit {
sealed trait PropertyValue
case class IntValue(value: Int) extends PropertyValue
case class RealValue(value: Float) extends PropertyValue
class Parser extends JavaTokenParsers {
def propertyLiteral : Parser[PropertyValue] = intValue | realValue
def realValue = floatingPointNumber ^^ {
s => RealValue(s.toFloat)
}
def intValue = wholeNumber ^^ {
s => IntValue(s.toInt)
}
}
"A java token parser" should "parse a float" in {
val p = new Parser()
val result = p.parseAll(p.propertyLiteral, "5.4") match {
case p.Success(x, _) => x
case p.NoSuccess(msg, _) => fail(msg)
}
result should be(RealValue(5.4f))
}
}
这失败并显示以下错误消息:
string matching regex `\z' expected but `.' found
一个想法是,基于这个线程,我<~ not(not('.'))
在整数之后放置了一个,但这似乎并没有解决问题。