我一直有一個問題,得到了整數和浮點數之間的scala combinator分析器(特別是通過JavaTokenParsers的RegexParsers)。我必須在這裏錯過一些非常基本的東西,因爲我無法在任何地方發現這個特定問題。我已經包含了一個有問題的解析器代碼的規範(當然不包括)。使用Scala組合器分析器來區分整數和浮點數
@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
一個想法,根據本thread,我放在<~ not(not('.'))
的wholeNumber之後,但這似乎並沒有解決問題。
我知道這是簡單的事情,它只是通過我......謝謝! –