【发布时间】:2013-05-23 18:55:23
【问题描述】:
我正在尝试在 Scala 中构建一个简单的外部 DSL,它能够解析如下字符串:
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) 不是正确的方法。
【问题讨论】:
标签: scala grammar dsl parser-combinators