作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在设计(迷你)语言时:当某些字符应该被转义以失去特殊含义时(如某些编程语言中的引号),当不可转义的字符(例如从不具有特殊含义的普通字符)出现时,应该做什么,尤其是从安全角度来看逃脱?错误应该被“错误”编辑,还是应该丢弃该字符,或者它是否应该像没有转义一样出现在输出中?
例子:在一种简单的语言中,字符串由双引号 ("
) 分隔,并且给定字符串中的任何引号都用反斜杠 (\
) 转义:对于输入"We\said,\"We want Moshiach Now\""
-- 应该如何处理 said
中的字母 s
这是逃脱了?
最佳答案
发生这种情况时,我更喜欢词法分析器提示。词法分析器/解析器应该严格遵守语法;以后总是可以放松的。如果你马虎,你会发现你无法收回你认为不是你做出的决定。
假设您最初决定将“反斜杠 not-an-escape”视为那对字符,并且“T”是今天不是逃脱。一段时间后,您决定扩展该语言,并希望“\T”具有特殊含义,于是您更改了您的语言。
你会发现一群愤怒的程序员冲进了你的设计城堡,因为对他们来说,“\T”意味着“\”“T”(或“T”取决于您的默认决定),而你刚刚破坏了他们的代码。你羞愧地低下头,收回决定,然后意识到...哎呀,没有更多可用的转义字符了!
本类(class)适用于您的语言中未明确定义的任何语法。如果它不是明确合法的,它应该是隐式非法的,你的编译器应该检查它。否则您将永远无法扩展您成功的语言。
如果您的语言不会成功,您可能不会太在意。
关于parsing - 当不可避免的字符被转义时该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5085827/
我是一名优秀的程序员,十分优秀!