当前位置:  开发笔记 > 编程语言 > 正文

Java编译器如何解析类型转换?

如何解决《Java编译器如何解析类型转换?》经验,为你挑选了1个好方法。

一个简单的表达式

(x) - y

根据是否x是类型名称进行不同的解释.如果x不是一个类型的名字,(x) - y只是减去yx.但如果x是类型名称,则(x) - y计算负数y并将结果值转换为类型x.

在典型的C或C++编译器中,是否x是类型的问题是可回答的,因为解析器在处理了typedef或struct声明后立即将这些信息传递给词法分析器.(我认为这种必要的违反水平是C设计中最糟糕的部分.)

但是在Java中,x可能直到后面的源代码才定义.Java编译器如何消除这种表达式的歧义?

很明显,Java编译器需要多次传递,因为Java不需要在使用前声明.但这似乎意味着第一遍必须在解析表达式时做一个非常草率的工作,然后在稍后的传递中做另一个更准确的表达式解析.这似乎很浪费.

有没有更好的办法?



1> Thom Boyer..:

我想我找到了满足我的解决方案.感谢mmyers,我意识到我需要检查类型转换语法的正式规范.

歧义是造成+-既是一元和二元运算.Java通过这种语法解决了这个问题:

CastExpression:
        ( PrimitiveType Dimsopt ) UnaryExpression
        ( ReferenceType ) UnaryExpressionNotPlusMinus

(见http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#238146)

所以,'+''-'明确后,立即禁止')'其是由编译器先验已知-铸造的,除非投采用的是原始类型.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有