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