浅析OpenJDK源码编译器Javac的语法树包com.sun.source.tree。
抽象语法树,是编译原理中的经典问题,有点难,本文只是随便写写。
0.赋值语句
public interface AssignmentTree extends ExpressionTree {
ExpressionTree getVariable();
ExpressionTree getExpression();
}
一个赋值语句的表达式,variable = expression,例如 a = a+1。
按照AssignmentTree 接口中的抽象,一个赋值语句的抽象语法树可以拆分成2个部分:左边的变量和右边的表达式。
变量和表达式也都是一个语法树。
更多语句
1.块语句
语法:{ }, { statements }, static { statements }
抽象语法树定义
public interface BlockTree extends StatementTree {
/**
* 是否为静态初始化
*/
boolean isStatic();
/**
* 初始化语句集合
*/
List<? extends StatementTree> getStatements();
}
2.类的定义
语法:modifiers class simpleName typeParameters extends extendsClause implements implementsClause {
members
}
抽象语法树定义
public interface ClassTree extends StatementTree {
/**
* 类的修饰符
*/
ModifiersTree getModifiers();
/**
* 类的简单名字
*/
Name getSimpleName();
/**
* 类的参数类型
*/
List<? extends TypeParameterTree> getTypeParameters();
/**
* 类的继承父类的语句
*/
Tree getExtendsClause();
/**
* 类的实现接口的语句
*/
List<? extends Tree> getImplementsClause();
/**
* 类的成员集合
*/
List<? extends Tree> getMembers();
}
3.Do-While循环
语法:do
statement
while ( expression );
抽象语法树定义
public interface DoWhileLoopTree extends StatementTree {
/**
* 条件表达式
*/
ExpressionTree getCondition();
/**
* 条件成立时,执行的语句
*/
StatementTree getStatement();
}
4.For-each循环
语法:for ( variable : expression )
statement
抽象语法树定义
public interface EnhancedForLoopTree extends StatementTree {
/**
* for-each循环中的变量定义
*/
VariableTree getVariable();
/**
* for-each循环中的需要遍历的变量(表达式)
*/
ExpressionTree getExpression();
/**
* for-each一次遍历过程中的语句
*/
StatementTree getStatement();
}
5.传统的for循环
语法:for ( initializer ; condition ; update )
statement
抽象语法树定义
public interface ForLoopTree extends StatementTree {
/**
* for循环中的初始化语句集合
*/
List<? extends StatementTree> getInitializer();
/**
* for循环中的判断条件
*/
ExpressionTree getCondition();
/**
* for循环中的更新条件语句
*/
List<? extends ExpressionStatementTree> getUpdate();
/**
* for循环中一次遍历执行的语句
*/
StatementTree getStatement();
}
6.Switch语句
语法:switch ( expression ) {
cases
}
抽象语法树定义
public interface SwitchTree extends StatementTree {
/**
* switch语句的条件表达式
*/
ExpressionTree getExpression();
/**
* switch语句的case表达式集合
*/
List<? extends CaseTree> getCases();
}
更多语句的语法定义和抽象语法树,与上面的类似,不再赘述。
编译器的编译过程和抽象语法树等概念,是比较难的。
大部分的同学,只需要了解即可。
原文参见:http://FansUnion.cn/articles/3086(小雷网-FansUnion.cn)
分享到:
相关推荐
java openJDK 源码, Hotspot, 未编译, 原始代码, 直接zip压缩包, java openJDK 源码, Hotspot, 未编译, 原始代码, 直接zip压缩包, java openJDK 源码, Hotspot, 未编译, 原始代码, 直接zip压缩包
主要是编译openjdk需要的包
openjdk源码1
OpenJdk源码包,
OPENJDK-7 windows编译之后版本
openjdk8源码,适合深入学习jdk源码的同学
openjdk 7u的源码,可以用来编译jvm(已编译成功),深入理解java虚拟机。由于资源上传限制,7u和6两个源码压缩为3个分卷,请下载3个分卷放在同一文件夹中再解压。自用资源,放心下载。
java jdk1.7源码包,用于centos7使用jdk1.7编译openjdk1.8的 1.7版本
openjdk-17源码(openjdk-17+35_src.zip)
在openjdk开源源码站下载速度过慢,这里提供openjdk8u的完整可编译源码,供大家自己编译属于自己的jdk版本,已经阅读openjdk源码帮助学习。在openjdk开源源码站下载速度过慢,这里提供openjdk8u的完整可编译源码,供...
openjdk7的langtools源码,可以进行openjdk的编译调试
openjdk hotspot源码,在研究JAVA虚拟机时,这个源码是必不可少的。
OpenJDK源代码,便于程序员筒子们深入研究JDK运行机制
编译调试jvm, openjdk8源码, openjdk7, make3.81源码
openjdk1.8 源码查看
openjdk jdk源码,在研究JAVA本地方法源码时,这个是必须的。
openjdk8 源码,openjdk8 源码,openjdk8 源码,openjdk8 源码
java虚拟机 源码 openjdk7 openjdk7源码(深入理解java虚拟机,读书笔记) 官方源码下载来自:
完整的openjdk7源码,可配合boot jdk6进行源码编译,亲测可用
openjdk6 源代码,分开也上传一份,省得太大了。