【发布时间】:2015-06-10 10:31:37
【问题描述】:
是否可以在使用前未声明变量的语言中对表达式进行类型检查,例如 x+y ?有人可以举个例子来解释一下。提前致谢。
【问题讨论】:
-
如果你的表达式中的每个术语都有一个类型,你就不能进行类型检查。该语言是动态类型的吗?如果是这样,当变量获得一个新值(例如,使用赋值
=)运算符时,您需要从该值推断类型并将其存储在您的 AST 中的某个位置。就像 PHP 语言一样,例如。 -
例如,
x = 2; y = 3.5;必须从常量值2推断出 php 具有 INTEGER 类型,从3.5常量推断出y具有 FLOAT 类型 -
但是在类型检查之前我建议你做类型提升:en.wikipedia.org/wiki/Type_conversion
-
部分语言支持Type Inference;所以“用特定类型声明的变量”不是必需的;但是任何相关的编译时类型检查都需要“可解析为类型[或类/限制]的表达式”。究竟如何解析表达式,以及强制执行哪些限制,在很大程度上取决于语言的设计。
标签: compiler-construction semantics typechecking