我从一个声称解析实数的项目中获取了这个,但它以某种方式吃掉了小数点前的部分:
object Main extends App {
import org.parboiled.scala._
val res = TestParser.parseDouble("2.3")
println(s"RESULT: ${res.result}")
object TestParser extends Parser {
def RealNumber = rule {
oneOrMore(Digit) ~ optional( "." ~ oneOrMore(Digit) ) ~> { s =>
println(s"CAPTURED '$s'")
s.toDouble
}
}
def Digit = rule { "0" - "9" }
def parseDouble(input: String): ParsingResult[Double] =
ReportingParseRunner(RealNumber).run(input)
}
}
这打印:
CAPTURED '.3'
RESULT: Some(0.3)
这里有什么问题?请注意,目前我不能从 Parboiled-1 转到 Parboiled-2,因为我有一个更大的语法需要重写。