我正在尋找使用Scala的Parser Combinators來解析字符串(沒有換行符,人爲的例子)。將解析器組合器應用於案例分類
該字符串由許多不同的部分組成,我想單獨提取並填充案例類。
case class MyRecord(foo: String, bar: String, baz: String, bam: String, bat: String)
object MyParser extends scala.util.parsing.combinator.RegexParsers {
val foo: Parser[String] = "foo"
val bar: Parser[String] = "bar"
val baz: Parser[String] = "baz"
val bam: Parser[String] = "bam"
val bat: Parser[String] = "bat"
val expression: Parser[MyRecord] =
foo ~ bar ~ baz ~ bam ~ bat ^^ {
case foo ~ bar ~ baz ~ bam ~ bat => MyRecord(foo, bar, baz, bam, bat)
}
}
這工作得很好,但有沒有辦法將匹配結果的部分直接應用到case類而不解構?
val expression: Parser[MyRecord] =
foo ~ bar ~ baz ~ bam ~ bat ^^ MyRecord
更多信息:我解析字符串是相當漫長和複雜的(實際上,這是一個整個文件完全長複雜的字符串的),所以更改爲正則表達式是出了問題。
某處我有一個類型類的實現,它允許'foo〜bar ^^(t => as [MyRecord](t))'語法 - 我會試着去挖掘它。 –
我把問題打開了幾天,看看是否有更多的答案進來。我想我更喜歡你的第二個答案,因爲它不依賴於外部庫。謝謝你的幫助! – adlawson