1

我想使用 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 能够解析这个吗?

4

1 回答 1

0

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

于 2015-09-07T23:00:44.000 回答