2
スカラーDSLの使い方を学んでください。 しかし、私は非常に単純なことに固執する:scala dslパーサー:rep、opt、regexps
私は、行末までコメントとして ' - 'を持つ言語を解析しています。
一行は、使用して正常に動作します:
def comment: Parser[Comment] = """--.*$""".r ^^ { case c => Comment(c) }
しかし、私はエラーを取得する複数のラインを接続します。
は、私はいくつかのvaraintsを試してみたが、以下は、単純な感じ:
def commentblock: Parser[List[Comment]] = opt(rep(comment)) ^^ {
case Some(x) => { x }
case None => { List() }
}
二つの連続commentlinesでテストを実行しているとき、私はエラーを取得します。
テストケース:
--Test Comment
--Test Line 2
エラー:
java.lang.AssertionError: Parse error: [1.1] failure: string matching regex `--.*$' expected but `-' found
私はこの問題を解決する方法上の任意のアイデア?
以下に完全なコード:
import scala.util.parsing.combinator._
abstract class A
case class Comment(comment:String) extends A
object TstParser extends JavaTokenParsers {
override def skipWhitespace = true;
def comment: Parser[Comment] = """--.*$""".r ^^ { case c => Comment(c) }
def commentblock: Parser[List[Comment]] = opt(rep(comment)) ^^ {
case Some(x) => { x }
case None => { List() }
}
def parse(text : String) = {
parseAll(commentblock, text)
}
}
class TestParser {
import org.junit._, Assert._
@Test def testComment() = {
val y = Asn1Parser.parseAll(Asn1Parser.comment, "--Test Comment")
assertTrue("Parse error: " + y, y.successful)
val y2 = Asn1Parser.parseAll(Asn1Parser.commentblock,
"""--Test Comment
--Test Line 2
""")
assertTrue("Parse error: " + y2, y2.successful)
}
}
完璧、ありがとう!愚かな私はこれがscalaの一致の問題、 正規表現の問題ではないと思った。 –
@Bjorn、:)、大歓迎です! –