我承认这个问题可能无法回答,或者极难回答。
此外,尽管我希望这些观众能够熟悉例如脚本语言为了清楚起见,您将在后面的帖子中看到,我会回顾这个概念:
通过"逃脱,"我的意思是例如可打印的字符被解释为"不要像往常一样使用下一个字符;在另一个背景下解释它。"对此的上下文包括不应被解释为代码的字符,而是作为文字打印字符,或相反地,通常可被解释为字面字符的字符,我们希望将其解释为代码。我的例子(我现在意识到的更令人困惑)使用了后一种情况。
具体示例:与' 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"中所述。你可以(松散地)调用这些"计算机字母表,"如果你愿意的话。在哪里我说"代码页分配,"我的意思是计算机上的一个条目"字母表"解释为渲染字形(可打印字符)或未打印控制代码(不可打印字符)。
这个想法是指定一个特定的,未打印的控制代码页分配来表示"将下一个字符解释为已转义,"文本渲染器可以"读取"并通过改变例如向程序员指示控制代码后面的转义字符的颜色和/或亮度。和/或控制代码页面分配可以是可打印的字形,例如是标准化的,非侵入性的重音符号,其不与任何与罗马字母相关的字母表中的任何其他重音符冲突。
此未打印的代码页分配也将由解释器和编译器同样阅读。
假设比我上面提到的更长的正则表达式的渲染版本:
如果我们有一个未打印的代码页分配,意味着"下一个字符被转义,"例如,转义的字符可以简单地呈现为更亮,以表示它们已被转义:
对于一个人来说,这比以下更容易解释(albiet,这很难以正则表达式开头),而后者则使用打印字符作为转义序列:
在我写这篇文章时,主要的,如果不是普遍的情况是在转义序列中使用打印字符,而不是未打印的代码页分配。
建议的解决方案的助手问题是确保程序员使用的许多工具符合转义的代码页分配。程序员还必须知道哪些实用程序支持转义的代码页分配,哪些不支持。此外,对于采用这种代码页分配的任何工具来说,最好是明确它们是否向后兼容(它们是否可以使用打印字符和转义序列的未打印代码页分配)。
我不更喜欢通过除转义控制代码页分配以外的任何方式完成此任务的任何编程语言或工具。尽管如此,我对任何这样做的工具都非常好奇。
所有这些之后,我的问题是:有哪些编程语言可以做到这一点,和/或是否已经有代码页分配这样做了?
答案 0 :(得分:2)
我不知道任何编程语言能够满足你的建议。以不可打印的文本格式存储程序的问题在于,您的用户只能使用了解特定的不可打印文本格式的工具。
另外,假设你选择了一个特定的,不可打印的控制字符来表示转义的字符。然后,你如何方便输入他们?如果您需要键入一个特殊键来转义角色,您可以轻松地将其作为反斜杠。毕竟,只要您设计语言语法,智能编辑器就可以正确识别哪些文字需要打印得漂亮,就可以像打印一样简单地打印可打印字符。
答案 1 :(得分:1)
\
可以保持为转义字符。您只需要找到一个可配置的编辑器,并按照您想要的方式进行配置。*我能想到的两个主要例外在这里并不有趣:APL有自己的符号集和支持标识符中Unicode的语言。