【发布时间】:2012-10-23 13:25:29
【问题描述】:
在类型检查或解析输入时是否会产生这种类型的错误? 应该在什么类型下解决错误?
【问题讨论】:
-
这取决于我认为的语言。对于静态类型语言(例如 C、Scala),我会认为它是语法/“句法”错误,并希望它在编译期间发生;在具有动态变量绑定的语言(例如 JavaScript、Ruby)中,我认为这是一个语义错误,并希望它在运行时发生。无论如何,我投了“不具建设性”的票。
-
那么在静态类型语言中,类型检查是在解析过程中完成的?
-
解析和类型检查确实应该被视为整个编译过程的两个不同阶段。但是,这将取决于实施;这是可以想象的- ick! - 在解析期间强制执行范围规则。类型检查不仅仅是“范围检查”:不仅必须定义绑定(甚至可能分配一个值),而且类型必须兼容。
-
糟糕,澄清我的第一条评论:我会将“未声明的变量”归类为语法,而我可以说“不兼容的类型”是静态环境中的语义。
-
呵呵,有趣的问题。我不同意投票关闭它的人,这是与编程相关且特定的。 (顺便说一句,我在设计我的脚本语言时偶然发现了完全相同的问题 - 我还没有完成它,但我发现这更容易实现为“语义”,运行时类型的错误。)
标签: parsing compiler-construction semantics syntactic-sugar typechecking