【发布时间】:2011-04-01 05:35:19
【问题描述】:
所以我正在阅读 Walter Bright 关于 Bitwise 中的 D 语言 (http://www.bitwisemag.com/copy/programming/d/interview/d_programming_language.html) 的采访,我看到了这句关于语言解析的非常有趣的引述:
然而,从理论的角度来看,能够生成良好的诊断要求语法中存在冗余。冗余用于猜测预期的内容,冗余越多,猜测越有可能是正确的。这就像英语——如果我们不时拼错一个 wrod,或者如果一个单词丢失,冗余使我们能够正确猜测其含义。如果一种语言没有冗余,那么任何随机的字符序列都是有效的程序。
现在我想弄清楚他说“冗余”是什么意思。
我几乎无法理解最后一部分,他提到有可能拥有一种“任何随机字符序列都是有效程序”的语言。我被告知存在三种错误:句法、运行时和语义。是否存在唯一可能的错误是语义错误的语言?组装是这样的吗?机器码呢?
【问题讨论】:
-
我猜他在这里谈论的是语法。机器代码可能与他所说的非常接近。任何有效的机器码操作字符串都是有效的语法。
-
这取决于什么指令集。有些肯定有非法指令,这往往会造成陷阱。
-
但这就像在脚本中使用来自字符集中的无效字符一样,这并不是语法问题。如果您将输入字符集限制为有效的机器代码操作,那么您可以将它们按任何顺序排列,并且您拥有一个有效的程序(就语言的语法而言)。所以这种语言没有冗余。
-
我同意。如果我们接受 OP 的论点,即存在 3 种错误,那么机器语言最多允许两种,运行时(非法指令)和语义(只是做错事)。当然有语言(不一定有用),只有语义错误。
-
现在有点晚了,但真的很短的答案是它可以让编译器告诉你“缺少分号”之类的东西。
标签: parsing programming-languages error-handling d semantics