プログラミング言語 Scala 8冊目
■ このスレッドは過去ログ倉庫に格納されています
0175デフォルトの名無しさん
2012/07/09(月) 10:42:24.72case class IntDef(name: String, value: Int)
case class IntArrayDef(name: String, value: IndexedSeq[Int])
object HogeParser extends JavaTokenParsers {
lazy val parse = "int" ~> repsep((defIntArray | defInt), ",") ~ ";"
lazy val defInt = ident ~ ("=" ~ wholeNumber).? ^^ {
case ident ~ None => IntDef(ident, 0)
case ident ~ Some(_ ~ default) => IntDef(ident, default(0).toInt)
}
lazy val defIntArray = ident ~ "[" ~ wholeNumber ~ "]" ~ ("=" ~ "{" ~> repsep(wholeNumber, ",") <~ "}").? ^^ {
case ident ~ _ ~ size ~ _ ~ None => IntArrayDef(ident, IndexedSeq.fill(size.toInt)(0))
case ident ~ _ ~ size ~ _ ~ Some(defaults) => IntArrayDef(ident, defaults.map(_.toInt).toIndexedSeq)
}
def apply(str: String) = parseAll(parse, str)
}
scala> HogeParser("int hoge, hage[3] = { 1, 2, 3 }, huge = 5;").get
res1: HogeParser.~[List[Product with Serializable],String] =
(List(IntDef(hoge,0), IntArrayDef(hage,Vector(1, 2, 3)), IntDef(huge,5))~;)
■ このスレッドは過去ログ倉庫に格納されています