2014-11-05 34 views
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能够解析这个?

+0

看起来像你正在使用Parboiled1。你可以使用Parboiled2,它不会解决你的问题,但是..你会获得更好的工具。 – ppopoff 2015-09-07 22:58:33

回答

0

请将所有规则包裹在'规则'区块内。它有助于在某些情况下

相关问题