1
我想使用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能夠解析這個?
看起來像你正在使用Parboiled1。你可以使用Parboiled2,它不會解決你的問題,但是..你會獲得更好的工具。 – ppopoff 2015-09-07 22:58:33