一个简单的表达式,如
(x) - y
根据是否x
是类型名称,解释不同。如果x
不是类型名称,(x) - y
只需y
从x
. 但是 ifx
是一个类型名称,(x) - y
计算负数y
并将结果值转换为 type x
。
在典型的 C 或 C++ 编译器中,是否x
是类型的问题是可以回答的,因为解析器在处理 typedef 或 struct 声明后立即将此类信息传达给词法分析器。(我认为这种要求违反级别是 C 设计中最讨厌的部分。)
但是在 Java 中,x
可能要到源代码的后面才能定义。Java 编译器如何消除这种表达式的歧义?
很明显,Java 编译器需要多次传递,因为 Java 不需要在使用前声明。但这似乎意味着第一遍必须在解析表达式上做一个非常草率的工作,然后在后面的一遍中做另一个更准确的表达式解析。这似乎很浪费。
有没有更好的办法?