文章目录
静态语义分析构建
静态语义处理;
学习笔记,仅供个人知识导航用处,不作其它用途
部分段落翻译自博客中列出的 参考文献
1. JDT(Java开发工具, Java development tools)
了解JDT是啥,了解其工具集
1.1 JDT插件的组件内容
-
JDT APT
Annotation Processor Tool(注解处理工具)
-
JDT Core
非UI的基础设施
-
JDT Debug
实现了Java Debug支持,能够作用于任意兼容JDPA的目标JVM。实现在由平台Debugger提供的语言无关的Debug模式之上。
-
JDT Text
提供了Java编辑器的一些特性
-
JDT UI
实现Java Workspace的UI,例如
- Package Explorer
- Type Hierarchy View
- Java Outline View
- Wizards for creating Java elements
1.2 参考文献
2. AST(抽象语法树, Abstract Syntax Tree)
对于静态分析来说,抽象语法树是最基础的技术
2.1 Eclipse JDT - Abstract Syntax Tree (AST) and the Java Model
Eclipse JDT提供了API用来访问和操作Java源码。它通过 Java Model , Abstract Syntax Tree(AST) 来访问Java源码:
-
The Java Model
Java Model被定义在 org.eclipse.jdt.core 插件。Java Model以树状结构呈现。
Java Model
Project Element Java Model element Description Java project IJavaProject The Java project which contains all other objects. src folder / bin folder / or external library IPackageFragmentRoot Hold source or binary files, can be a folder or a library (zip / jar file ) Each package IPackageFragment Each package is below the IPackageFragmentRoot, sub-packages are not leaves of the package, they are listed directly under IPackageFragmentRoot Java Source File ICompilationUnit The Source file is always below the package node Types / Fields / Methods IType / IField / IMethod Types, fields and methods -
The Abstract Syntax Tree (AST)
- AST定义了对源代码进行修改,创建,读取,删除的API
- AST的main package是 org.eclipse.jdt.core.dom 包,位于 org.eclipse.jdt.core 插件包下
- 每个 Java source element 都是ASTNode类的子类,每个具体的ASTNode实现类都提供了这个对象的具体信息
- MethodDeclaration, 提供方法信息
- VariableDeclarationFragment, 提供变量声明的相关信息
- SimpleName, 非Java关键字字符串
- AST通常是从Java Model中的ICompilationUnit创建的,AST一般的工作处理流程如下:
- 给定一个用于解析的Java源码
- 通过 org.eclipse.jdt.core.dom.ASTParser 解析源码,并返回一个AST
- 对AST进行操作,如修改等
- AST上的改变,通过IDocument接口,写回到源码上
- 更多的代码例子,参考文章:Eclipse JDT - Abstract Syntax Tree (AST) and the Java Model
2.2 参考文献
- Eclipse JDT - Abstract Syntax Tree (AST) and the Java Model
- Eclipse IDE Plug-in Development: Plug-ins, Features, Update Sites and IDE Extensions
- Represent a Java file as an AST(Abstract Syntax Tree)
- Abstract Syntax Tree
3. 工具
写文章过程中搜索到的工具