在Scala解析器组合器

时间:2015-06-19 15:33:13

标签: scala parsing

我有以下规则(为清楚起见,还有许多其他规则):

def bindRg: Parser[Cmd] = "bind-roaming-group" ~> name ~ bindRgBody(????) <~ 
    exit  ^^ { case name~body => new BindRoamingGroupCmd(name, body)}

def bindRgBody(name: String) = // ...

def name: Parser[String] = """\S+""".r  

我想传递&#34; name&#34;的字符串值到bindRgBody(????)但不知道该放入什么&#39; ????&#39;

1 个答案:

答案 0 :(得分:3)

您可以在解析器flatMap上使用"bind-roaming-group" ~> name

def bindRg: Parser[Cmd] = ("bind-roaming-group" ~> name) flatMap (n => bindRgBody(n) <~ exit ^^ (b => new BindRoamingGroupCmd(n, b)))

def bindRg: Parser[Cmd] = ("bind-roaming-group" ~> name) >> (n => bindRgBody(n) <~ exit ^^ (new BindRoamingGroupCmd(n, _)))

如果你想稍微缩短它。