Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用~>;和<;~在Scala解析器组合器库中多次使用_Scala_Parser Combinators - Fatal编程技术网

使用~>;和<;~在Scala解析器组合器库中多次使用

使用~>;和<;~在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

我正在使用scala parser combinator库解析属于术语重写器库的术语。下面是给我带来问题的代码:

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
在换行之前,在每一行包含空格的输入上都会换行。