次のような文字列を解析できる単純な外部 DSL を Scala で構築しようとしています。
value = "john${tom}peter${greg}${sue}meg"
一般に、引用符で囲まれた部分文字列には、インターレースされた名前と、 と の間に置かれ${
た名前が含まれます}
。
私の文法は次のとおりです。
class Grammar extends JavaTokenParsers {
def workflow = "value" ~> "=" ~> "\"" ~> pair <~ "\""
def pair = rep(str | token)
def str = rep(char)
def char: Parser[String] = """[a-z]""".r
def token = "$" ~> "{" ~> str <~ "}"
}
および実行者:
var res = parseAll(workflow, str)
println(res)
def pair = rep(str | token)
メソッドを使えばちゃんと解析できると思いました。機能しないだけでなく、parseAll
メソッド内で無限ループにつながります。
そのような文字列をどのように解析できますか? 別の繰り返し ( rep
) は正しいアプローチではないようです。