使用~>;和<;~在Scala解析器组合器库中多次使用
我正在使用scala parser combinator库解析属于术语重写器库的术语。下面是给我带来问题的代码:使用~>;和<;~在Scala解析器组合器库中多次使用,scala,parser-combinators,Scala,Parser Combinators,我正在使用scala parser combinator库解析属于术语重写器库的术语。下面是给我带来问题的代码: def parser: Parser[(Map[String,Operation],List[Rule])] = "section signature\n" ~> signature <~ "end signature" ~ "section rules\n" ~> rules <~ "end rules" ^^ { case
def parser: Parser[(Map[String,Operation],List[Rule])] =
"section signature\n" ~> signature <~ "end signature" ~
"section rules\n" ~> rules <~ "end rules" ^^ {
case s ~ rs => (s,rs)
}
def解析器:解析器[(映射[String,Operation],列表[Rule])]=
“节签名\n”~>签名规则
}
其目的是仅对部分函数中的签名和规则进行模式匹配。但是,上面的代码给出了一个编译错误,我所能做的就是:
def parser: Parser[(Map[String,Operation],List[Rule])] =
"section signature\n" ~> signature ~ "end signature" ~
"section rules\n" ~ rules <~ "end rules" ^^ {
case s ~ "end signature" ~ "section rules\n" ~ rs => (s,rs)
}
def解析器:解析器[(映射[String,Operation],列表[Rule])]=
“节签名\n”~>签名~“结束签名”~
“节规则\n”~规则
}
有没有办法摆脱“结束签名”~“节规则\n”部分?我通常会这样做:
("section signature\n" ~> signature <~ "end signature") ~
("section rules\n" ~> rules <~ "end rules")
(“section signature\n”~>signature rules@Rodrigo我已经稍微更新了答案。\n
不仅是不需要的:可能所有的空白字符都不应该放在第一位。特别是,\n
在换行之前,在每一行包含空格的输入上都会换行。