Syntax 内部语法注释中的双引号

Syntax 内部语法注释中的双引号,syntax,comments,isabelle,Syntax,Comments,Isabelle,“字符在Isabelle内部语法的双引号中放入注释时,其行为与我预期的不一样。澄清一下:在下面的函数定义中,我预期符号“at”将被解析为注释。事实上,Isabelle匹配第一个”注释中的字符,该行开头带有“,从而导致语法错误 fun reverse where "reverse [] = []" | "reverse (x#xs) = reverse xs @ (* the "at" sign *) [x]" 我可以通过写(*at'符号*)来克服这个限制,但我更想了解到底发生了什么。那么

字符在Isabelle内部语法的双引号中放入注释时,其行为与我预期的不一样。澄清一下:在下面的函数定义中,我预期
符号“at”将被解析为注释。事实上,Isabelle匹配第一个
”注释中的
字符,该行开头带有
“,从而导致语法错误

fun reverse where 
  "reverse [] = []"
| "reverse (x#xs) = reverse xs @ (* the "at" sign *) [x]"

我可以通过写
(*at'符号*)
来克服这个限制,但我更想了解到底发生了什么。那么,在Isabelle术语中写这种注释的正确方法是什么呢?

我想它应该与转义字符一起工作,比如\“?

谢谢Jimmy,这很有效。在接受你的回答之前,我会稍等片刻,只是因为我对必须转义引号感到有点不舒服——当我在评论中时,感觉我不应该这样做……这里需要转义引号是Isabelle将外部和内部语法结合在一起的结果,这是由单独的解析器处理的。外部解析器不知道任何关于内部语法注释的信息,因此它将此示例解析为两个单独的带引号的字符串。根据SML和Isar语法,这是完全正常的。在双引号内,您需要转义。当注释和引用结合在一起时,在OCaml和Coq中可能会发生真正令人惊讶的事情。