Parboiled を使用して、同様のソースを異なる型に変換する必要がある文字列を解析したいと考えています。
具体的には、同じセパレーターで区切られた単語の入力を解析して(List[String], String)
、最後の単語がタプルの 2 番目の要素である場所に相当するものにしようとしています。
たとえば、"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 はこれを解析できますか?