gpt4 book ai didi

escaping - 包含 "\"的 OCaml 注释导致 "comment not terminated"

转载 作者:行者123 更新时间:2023-12-04 18:43:01 25 4
gpt4 key购买 nike

这个评论没问题:

(* "\z" foo *)

此注释导致错误:
(* "\" foo *)

有没有办法在 OCaml 注释中包含文字引用的单反斜杠?为什么显而易见的方法不起作用?我希望评论中的转义会被忽略。

就其值(value)而言,我正在尝试记录为自己的目的处理反斜杠转义的代码的测试。

谢谢阅读。

编辑:情节变厚。以下意见是可以接受的:
(* "\" "\"    notice-> " *)
(* "\" " "\" notice-> " *)
(* "\" foo "\" notice-> " " " *)
(* "\" " " "\" notice-> " *)
(* "\" "" " "\" notice-> " *)
(* "\" arbitrary "s "\" notice-> " *)
(* " \" note the spacing " \" notice-> " *)
(* "\" <- notice-> " *)
(* "\" " <- notice -> " " *)
(* "" *) (* """" *)

但是在末端添加或取一个,它就坏了。以下全部失败(在 REPL 中要求更多输入):
(* "\"  "\" *)
(* "\" foo "\" notice-> *)
(* "\" foo "\" notice-> " " *)
(* "\" foo "\" notice-> " " " " *)
(* "\" foo " "\" notice-> " " *)
(* "\" foo " " "\" notice-> " " *)
(* " *) (* """ *) (* """"" *)

我很失落。似乎它试图平衡引号,但转义的引号将其抛出循环。

最佳答案

OCaml 中的注释必须包含合法的 OCaml 词汇单元(标记)。这使您可以轻松地注释掉代码,甚至是带有注释的代码。甚至带有字符串常量的代码碰巧包含 (**) .

您可以拥有 "\\"在评论中。但你不能有 "\"因为它不是合法的 OCaml token 。 (这是一个未终止的字符串常量。)

您可以在 Lexical Conventions 中找到 OCaml 的合法 token 。手册的章节。

编辑

正如lukstafi 指出的那样,仅仅说出现在OCaml 注释中的字符串必须与出现在注释之外的字符串具有相同的结构就更正确了。这对于允许可靠地注释掉代码(可能包含看起来像部分注释的字符串常量)是必要的。

编辑 2

(* "\" "\"    notice-> " *)

这没有什么令人惊讶的(在我看来)。注释由两个字符串常量组成,带有 \他们之间的性格。在字符串常量之外 \字符不引用任何内容。这只是一个角色。 (在 OCaml 代码中 \ 不是一个合法的字符,但在评论中很好 - 请注意,lukstafi 的澄清解释了这一点。)

如果我标记所有字符,也许会更清楚。 (对于开放报价, )对于收盘价, Q对于字符串中的反斜杠(它引用下一个字符), B对于字符串外的反斜杠(它只是一个普通字符), S对于字符串中的其他字符, C对于字符串之外的其他字符。
(* "\" "\"    notice-> " *)
C(QSS)B(SSSSSSSSSSSSS)C

这是错误的情况之一:
(* " *) (* """ *) (* """"" *)
C(SSSSSSS)()C C()()(SSS

它有一个未终止的字符串常量。请注意,第一个字符串中有两个类似注释分隔符的序列。但这只是一个字符串。

关于escaping - 包含 "\"的 OCaml 注释导致 "comment not terminated",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20795327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com