我正在尝试创建一个简单的解析器,如下所示。但是,我不确定为什么组合器解析器抱怨不能识别浮点数#39;如果有“约会”日期'格式。它识别何时识别'
以下是有错误的代码。
非常感谢您的帮助!
import scala.util.parsing.combinator.JavaTokenParsers
class MyParser extends JavaTokenParsers {
def dates = repsep(date, ";")
def date = """\d{2}-[a-zA-Z]{3}-\d{4}""".r
def value = ident | dates | date | floatingPointNumber
def obj = "("~>repsep(value,",")<~")"
}
object MyParser extends MyParser {
def main(args: Array[String]): Unit = {
println(parseAll(obj, "(22-Jan-2016;09-Mar-2015)"))
println(parseAll(obj, "(22-Jan-2016;09-Mar-2015,blah3)"))
println(parseAll(obj, "(22-Jan-2016;09-Mar-2015,32)"))
}
}
[1.26] parsed: List(List(22-Jan-2016, 09-Mar-2015))
[1.32] parsed: List(List(22-Jan-2016, 09-Mar-2015), blah3)
[1.26] failure: `)' expected but `3' found
(22-Jan-2016;09-Mar-2015,32)
^
答案 0 :(得分:0)
假设您希望date
中存在至少一个 dates
,请使用
def dates = rep1sep(date, ";")
似乎解决了这个问题。
我相信原因是dates
解析器能够接受一个空字符串(即&#34;&#34;将解析为Nil
),这导致{{1永远不会评估floatingPointNumber
解析器的一部分。如果您更改value
以使其无法接受空输入,则解析成功:
dates