在设计(迷你)语言时:
当某些字符应转义以失去特殊含义(例如某些编程语言中的引号)时,应做些事情,尤其是从安全角度考虑,当无法逃脱的字符(例如,从未有特殊含义的普通字符)逃脱了错误应该被“错误化”,还是应该丢弃字符,或者输出中的字符是否与未转义字符相同?

例:
在一种简单的语言中,字符串用双引号(")分隔,给定字符串中的所有引号都用反斜杠(\)进行转义:对于输入"We \said, \"We want Moshiach Now\""-应该怎么做s中的字母said被转义了吗?

最佳答案

发生这种情况时,我更喜欢词法分析器。词法分析器/解析器应严格遵守语法;以后总可以放松一下。如果您草率,那么您将发现您无法撤回您未曾做出的决定。

假设您最初决定将“反斜杠非转义”视为该对字符,并且“ T”为
今天不可逃脱。稍后,您决定扩展语言,并希望“ \ T”表示特殊含义,然后更改语言。

您会发现一群愤怒的程序员涌入您的设计城堡,
因为对于他们来说,“ \ T”表示“ \”“ T”(或“ T”,具体取决于您的默认决定),
而且您刚刚破解了他们的代码。你垂头丧气,撤回决定,
然后意识到...哎呀,没有更多可用的转义字符!

本课适用于您的语言中定义不正确的任何语法。如果它不是明确合法的,则应隐式合法,编译器应对其进行检查。否则您将永远无法扩展成功的语言。

如果您的语言不会成功,那么您可能不太在意。

10-06 03:17