使用Parboiled用相同的分隔符解析不同的输入类型

时间:2014-11-05 23:05:06

标签: scala parboiled

我想使用Parboiled来解析一个字符串,该字符串应该将类似的源转换为不同的类型。

具体来说,我试图将由同一个分隔符分隔的单词输入解析为等效的(List[String], String),其中最后一个单词是元组的第二个元素。

例如,"a.bb.ccc.dd.e"应解析为(["a", "bb", "ccc", "dd"], "e")

我的代码的简化版本如下:

case class Foo(s: String)

case class Bar(fs: List[Foo], f: Foo)

object FooBarParser extends Parser {

  val SEPARATOR = "."

  def letter: Rule0 = rule { "a" - "z" }

  def word: Rule1[String] = rule { oneOrMore(letter) ~> identity }

  def foo = rule { word ~~> Foo }

  def foos = rule { zeroOrMore(foo, separator = SEPARATOR) }

  def bar = foos ~ SEPARATOR ~ foo  ~~> Bar
}

object TestParser extends App {

  val source = "aaa.bbb.ccc"

  val parseResult = ReportingParseRunner(FooBarParser.bar).run(source)

  println(parseResult.result)
}

这打印None显然我做错了。 Parboiled能解析这个吗?

1 个答案:

答案 0 :(得分:0)

请将所有规则包含在“规则”块中。在某些情况下它有帮助