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

时间:2018-07-25 14:23:18

标签: scala parser-combinators

我正在使用scala解析器组合器库来解析属于术语重写器库的术语。这是给我带来问题的代码:

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 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)
    }

是否有办法摆脱“结束签名”〜“部分规则\ n”部分?

1 个答案:

答案 0 :(得分:1)

我通常会这样做:

$content = str_replace('<img src="../../../','<img src="',$content);
$pdf->loadHTML($content);

顺便说一句:显式("section signature\n" ~> signature <~ "end signature") ~ ("section rules\n" ~> rules <~ "end rules") 看起来可疑。真的需要吗?同样,硬编码空间也看起来很奇怪。如果输入包含\n"section signature"怎么办?如果一行以空格结尾(讨厌,因为没有特殊的文本编辑器设置就看不见)怎么办?解析器是否真的必须对空白的每个微小变化都造成灾难性的失败?