1

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

此外,尽管我希望这些观众熟悉脚本语言中的转义序列,但为了清楚起见,您将在本文后面看到,我将回顾一下这个概念:

“转义”是指例如可打印的字符,这些字符被解释为“不要像往常一样使用下一个字符;在另一个上下文中解释它”。上下文包括不被解释为代码的字符,而是作为文字打印字符,或者相反,通常可以被解释为我们想要解释为代码的文字字符的字符。我的例子(更令人困惑,我现在意识到)使用后一种情况。

具体示例:与 '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}\)

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

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

在我说诸如“控制代码页分配”之类的东西的地方,我指的是计算机用来呈现和控制文本布局等的可打印(和不可打印)字符表的代码页,正如解释的那样在“代码页”的维基百科文章中。如果你愿意的话,你可以(松散地)称这些“计算机字母”。我所说的“代码页分配”是指计算机“字母表”中的一个条目,它被解释为呈现的字形(可打印字符)或未打印的控制代码(不可打印的字符)。

这个想法是指定一个特定的、未打印的控制代码页分配来表示“将下一个字符解释为已转义”,文本渲染器可以“读取”并通过更改例如转义字符的颜色和/或亮度来向程序员指示遵循控制代码。和/或控制代码页分配可以是可打印的字形,例如是标准化的、非侵入性的重音字形,它不与与罗马字母相关的任何字母中的任何其他重音相冲突。

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

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

未转义,丑陋的正则表达式

如果我们有一个未打印的代码页分配意味着“下一个字符被转义”,那么转义字符可以例如简单地渲染得更亮,以表明它们被转义:

少丑陋的控制代码转义正则表达式

对于人类来说,这比下面的解释要容易得多(尽管这很难从正则表达式开始),而是使用打印字符作为转义序列:

在此处输入图像描述

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

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

除了转义控制代码页分配之外,我喜欢通过任何方式完成此任务的任何编程语言或工具。尽管如此,我对任何可以做到这一点的工具都非常好奇。

因此,在所有这些之后,我的问题是:存在哪些编程语言可以做到这一点,和/或是否已经有代码页分配可以做到这一点?

4

2 回答 2

2

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

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

于 2016-02-08T04:32:16.690 回答
1
  • 据我所知,几乎所有编程语言都坚持使用可打印的 ASCII 字符*。
  • ASCII 中已经有一个特殊的转义控制字符,不出所料,称为 Escape 或 ESC(与Esc键的相似性并非偶然),代码 27 或 0x1B。但是这个字符不再以这种方式使用了。
  • 我认为您可以通过语法突出显示非常接近您想要的。
  • 如果您愿意打破您正在编辑的文件中的字节与您在屏幕上看到的字符之间的直接对应关系,那么我认为\可以继续作为转义字符。您只需要找到一个足够可配置的编辑器并按照您想要的方式进行配置。

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

于 2016-02-07T22:33:31.663 回答