用eclipse 编写JAVA代码时,他为什么能自动识别语法错误及给出正确的写法?这是JAVA编译器的哪种特性?

是叫静态分析吗?SSA
动态语法分析?和JVM有关系?

这是靠eclipse自带的插件实现的,的确属于静态分析。动态分析我不太了解,可能会涉及到jvm,但主要是在编译器内获取一些动态信息,如果想对java的多态进行分析就需要动态分析,即在编译时获取具体调用的类的信息。但如果是问eclipse的语法纠错,远没涉及那么高级的内容。
如果你去看eclipse文件夹下的plugins文件夹,你能找到类似org.eclipse.jdt.XXX.XXX的若干jar文件,那些包就是eclipse专门用以处理java代码分析工作的jdt插件工具包。他能抽取java代码的AST(抽象语法树),也就是编译时用到的数据结构,你若学过编译原理就知道了,反正我还没学。如果做一些java方面的逆向工程,你甚至可以引用eclipse的jdt包,将java项目的代码通过相应接口(你可以在网上找到jdt的api和实例代码)传进去,获取代码中的类,字段,方法,和更细节的信息。
而jdt中也包含检测,处理语法错误的包,可以发现并纠正语法错误。这一特点还可以用来做一些正向工程(如自修改或动生成代码)。
哦,还有,针对你的问题还要说,这点特性不是编译器的,而是编辑器eclipse的。注意,绝对是编辑器的特点!虽然涉及到语法问题,但在eclipse纠错时,还没有调用编辑器,即程序还没有编辑。只有在运行程序前eclipse才会调用编辑器。编译一次不容易,每次纠错都调用编译器的话开销太大,纠错的反应速度绝对不会像平时eclipse做的那么快。
实际上eclipse可以说就是由各种插件组成的,它本身只提供一个供各种插件运行的平台,本身功能很简单,但就是通过向jdt这样的插件包实现各种复杂的功能。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-10
肯定是通过插件实现的啦~~不过这个插件所有版本的Eclipse都自己集成了
Eclipse本身没有编译javascript时候的语法错误提示 你下个jsEclipse插件以后就有了
第2个回答  2012-03-10
这算代码动态验证吧,C时代没有这玩意,写半个小时程序编译通得花几倍的时间。追问

嗯哼。他是怎么做到的,是一个插件?还是编译器特性?

追答

编译器本身不干这个东西,这应该算是IDE或者是编辑器的特性。

追问

应该是编译器的工作,因为已经涉及到语法,语义了。
让我讨论再具体一点,比如他能识别你将一个变量赋值给一个不一样类型的变量,提示你进行类型转换;你调用函数时,参数类型或者个数不对,提示你重新定义函数或者修改参数,等等。
这些东西,如果用别的编辑器,比如用Emacs,写个插件也可以实现同样的功能?

追答

Emacs我没用过,Vi的插件好像可以做。

相似回答