【发布时间】:2016-05-17 12:00:15
【问题描述】:
我承认这个问题可能无法回答或极难回答。
此外,尽管我希望这些观众熟悉转义序列,例如脚本语言是,为了清楚起见,您将在本文后面看到,我将回顾一下这个概念:
“转义”是指例如可打印字符,这些字符被解释为“不要像往常一样使用下一个字符;在另一个上下文中解释它”。上下文包括不被解释为代码的字符,而是作为文字打印字符,或者相反,通常可以被解释为我们想要解释为代码的文字字符的字符。我的例子(更令人困惑,我现在意识到)使用后一种情况。
具体示例:与 '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}\)
转义字符(或序列)是编程的祸根之一。对于长字符串(或代码行)尤其如此,在这种情况下,只有特别注意和/或使用创建和删除转义序列的工具才实用。
我环顾四周,没有遇到像我建议的那样的解决方案,但不知道如果它存在可能会被命名为什么,而且不是专家,搜索是徒劳的。
我所说的“控制代码页分配”之类的东西是指计算机用来呈现和控制文本布局等的可打印(和不可打印)字符表的代码页。 ,如the wikipedia article on "Code Pages" 中所述。如果您愿意,您可以(粗略地)将这些称为“计算机字母”。我所说的“代码页分配”是指计算机“字母表”中的条目被解释为呈现的字形(可打印字符)或未打印的控制代码(不可打印字符)。
这个想法是指定一个特定的、未打印的控制代码页分配来表示“将下一个字符解释为转义”,文本渲染器可以“读取”并通过更改例如指示给程序员。控制代码后面的转义字符的颜色和/或亮度。和/或控制代码页分配可以是一个可打印的字形,例如一个标准化的、非侵入性的重音字形,它不会与与罗马字母相关的任何字母表中的任何其他重音相冲突。
解释器和编译器也可以类似地读取此未打印的代码页分配。
假设一个比我上面给出的更长的正则表达式的渲染版本:
如果我们有一个未打印的代码页分配意味着“下一个字符被转义”,例如,转义字符可以简单地渲染得更亮,以表明它们被转义:
对于人类来说,解释(尽管这很难从正则表达式开始)比使用打印字符作为转义序列的以下内容要容易得多:
在我写这篇文章时,如果不是普遍情况,主要的情况是在转义序列中使用打印字符,而不是未打印的代码页分配。
建议的解决方案的附带问题是确保程序员使用的许多工具与转义代码页分配的一致性。程序员还必须知道哪些实用程序支持转义代码页分配,哪些不支持。此外,任何采用这种代码页分配的工具最好明确说明它们是否向后兼容(它们是否可以同时使用打印字符和未打印的代码页分配用于转义序列)。
我不更喜欢通过转义控制代码页分配以外的任何方式完成此任务的任何编程语言或工具。尽管如此,我对任何可以做到这一点的工具都非常好奇。
因此,在所有这些之后,我的问题是:有哪些编程语言可以做到这一点,和/或是否已经有代码页分配可以做到这一点?
【问题讨论】:
-
我忘了提到另一个让我想要这个建议的解决方案的问题:在某些设置中,不同的字符需要不同的转义字符(DOS 那样可怕);这将消除查找或记住哪些字符转义哪些字符的需要。但是,引出此处给出的答案,可以提供一个足够可配置的编辑器来了解转义序列(包括不同字符的不同序列)并漂亮地打印它们;它也可以配置为建议它们。
标签: escaping programming-languages codepages scripting-language unicode-escapes