0

外部 DSL の作業を開始したばかりですが、問題が発生しました。私は非常に簡単なテストを書きました。Scala 2.9.0-1 と scalatest 1.6.1 を使用します。

class DSLTest extends FlatSpec with ShouldMatchers {

  object DSL extends JavaTokenParsers {

    def test = stringLiteral

    def apply(s: String): Either[String, String] = parseAll(test, s) match {
      case Success(tree, _) => Right(tree.toString)
      case NoSuccess(msg, _) => Left("Bad syntax: " + msg)
    }

  }

  "DSL" should "parse ABC" in {
    val input = "ABC"
    DSL(input) match {
      case Right(r) =>
        r should be === """(ABC)""""
      case Left(msg) =>
        fail(msg)
    }
  }

}

実行すると、解析中に失敗して次のように返されます。

不適切な構文: 正規表現に一致する文字列 `"([^"\p{Cntrl}\\]|\\[\\/bfnrt]|\\u[a-fA-F0-9]{4})*"' が必要ですしかし、「A」が見つかりました

私が間違っていたアイデアはありますか?私は基本的に Dean Wampler の本 (http://ofps.oreilly.com/titles/9780596155957/DomainSpecificLanguages.html) に従いました。

4

1 に答える 1

2

AstringLiteralは次のようなものです。

"I am a string literal because I'm between double quotes"

以下のように入力を宣言すると、動作するはずです。

val input = "\"ABC\""

次に、正しいケースでエラーが発生します。

    r should be === """(ABC)""""

書かれているべきだった

    r should be === """"(ABC)""""
于 2011-07-27T18:42:37.307 に答える