字符代码页:控制代码页赋值,表示"the next rendered character (in this source code) is escaped?"

Character code pages: control code page assignment that means "the next rendered character (in this source code) is escaped?"

我承认这个问题可能无法回答,或者极难回答。

此外,尽管如此,我还是希望听众熟悉转义序列,例如脚本语言是,为了清晰起见,您稍后会在 post 中看到,我将回顾这个概念:

"escaped," 我的意思是例如被解释为 "Do not use the next character as usual; interpret it in another context." 的可打印字符,其上下文包括不打算被解释为代码的字符,而是作为文字打印字符,或者相反,字符通常可能被解释为我们想要解释为代码的文字字符。我的示例(我现在意识到更令人困惑)使用后一种情况。

具体示例:与'nix sed一起使用的正则表达式,当没有为sed转义时,是这样的:

([^0-9]*)(20[0-9]{2})([^0-9]{1,2})([0-9]{1,2})

但是当 shell 转义以将正则表达式传递给 sed 时,sed 知道将字符解释为正则表达式代码而不是文字字符,整个字符串变得更丑陋(更不人性化) -可读):

\([^0-9]*\)\(20[0-9]\{2\}\)\([^0-9]\{1,2\}\)\([0-9]\{1,2}\)

转义字符(或序列)是编程的祸根之一。对于长字符串(或代码行)尤其如此,在这种情况下,只有特别注意 and/or 使用创建和删除转义序列的工具才是可行的。

我环顾四周,没有遇到像我提出的那样的解决方案,但不知道如果它存在可能被命名为什么,而且我不是专家,搜索是徒劳的。

我说 "control code page assignment," 之类的话是指计算机用来呈现和控制文本布局等的可打印(和不可打印)字符表意义上的代码页。 ,如 the wikipedia article on "Code Pages" 中所述。如果愿意,您可以(松散地)调用这些 "computer alphabets,"。我说 "code page assignment," 的意思是计算机 "alphabet" 中的条目被解释为呈现的字形(可打印字符)或未打印的控制代码(不可打印字符)。

这个想法是指定一个特定的、未打印的控制代码页分配来表示 "interpret the next character as escaped," 文本呈现器可以 "read" 并通过更改例如向程序员指示控制代码后面的转义字符的颜色 and/or 亮度。 And/or 控制代码页分配可以是可打印的字形,例如标准化的、非侵入性的重音字形,它不会与任何与罗马字母相关的字母表中的任何其他重音冲突。

解释器和编译器也可以类似地读取此未打印的代码页分配。

假设一个比我上面给出的更长的正则表达式的渲染版本:

如果我们有一个未打印的代码页分配,这意味着 "the next character is escaped," 转义字符可以简单地渲染得更亮,以表明它们已被转义:

对于人类来说,这比以下内容更容易解释(尽管这很难作为正则表达式开始),后者使用打印字符作为转义序列:

在我写这篇文章时,如果不是普遍情况,主要的情况是在转义序列中使用打印字符,而不是未打印的代码页分配。

提议的解决方案的附带问题是确保程序员使用的许多工具符合转义代码页分配。程序员还必须知道哪些实用程序支持转义代码页分配,哪些不支持。此外,对于采用此类代码页分配的任何工具,最好明确说明它们是否向后兼容(它们是否可以同时使用打印字符和未打印的代码页分配转义序列)。

更喜欢任何通过转义控制代码页分配以外的任何方式完成此操作的编程语言或工具。尽管如此,我还是很好奇任何执行此操作的工具。

所以在所有这些之后,我的问题是:存在哪些编程语言可以执行此操作,and/or是否已经有执行此操作的代码页分配?

  • 据我所知,几乎所有编程语言都坚持使用可打印的 ASCII 字符*。
  • ASCII 中已经有一个特殊的转义控制字符,毫不奇怪,称为 Escape 或 ESC(与 Esc 键的相似性并非偶然),代码 27 或 0x1B。但是这个字现在已经不是真的这么用了
  • 我认为仅通过语法高亮显示就可以非常接近您想要的结果。
  • 如果你愿意打破你正在编辑的文件中的字节和你在屏幕上看到的字符之间的直接对应关系,那么我认为 \ 可以继续作为转义字符。你只需要找到一个足够可配置的编辑器,然后按照你想要的方式配置它。

* 我能想到的两个主要例外在这里并不有趣:APL 有自己的一组符号和语言支持标识符中的 Unicode。

我不知道有任何编程语言可以执行您的建议。以不可打印文本格式存储程序的问题在于,您的用户只能使用能够理解特定不可打印文本格式的工具。

此外,假设您选择了一个特定的、不可打印的控制字符来指示转义字符。那么,您将如何方便地输入它们呢?如果您需要键入一个特殊键来转义一个字符,您可以很容易地将其设为反斜杠。毕竟,您可以像打印不可打印字符一样轻松地漂亮打印可打印字符——只要您设计语言语法,以便您的智能编辑器可以正确识别哪些文字需要漂亮打印。