How does a Java compiler parse typecasts?
一个简单的表达式,如
1 | (x) - y |
的解释取决于
在典型的 C 或 C 编译器中,
但在 Java 中,
很明显,Java 编译器需要多次通过,因为 Java 不需要使用前声明。但这似乎意味着第一遍必须在解析表达式上做一个非常草率的工作,然后在以后的遍中做另一个更准确的表达式解析。那看起来很浪费。
有没有更好的方法?
我想我已经找到了让我满意的解决方案。感谢 mmyers,我意识到我需要检查类型转换语法的正式规范。
歧义是由
1 2 3 | CastExpression: ( PrimitiveType Dimsopt ) UnaryExpression ( ReferenceType ) UnaryExpressionNotPlusMinus |
(参见 http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#238146)
因此,
我刚刚测试过了,这个代码:
给出编译错误:
operator - cannot be applied to Double, java.lang.Double .
在 -y 周围加上括号使其编译正常。显然,Java 通过在语法中不允许它来解决这个问题(如果这是正确的术语;我不是编译器方面的专家)。