Java中的语法树结构
转载
1、JCTypeParameter
1
|
class B<T extends CA&IA&IB> { ...}
|
截图如下:
接口继承了StatementTree接口,而实现类实现了JCStatement类,不过有一个例外,如:
CaseTree 实现了JCStatement,但接口JCCase是继承了Tree。
1、JCContinue
语法树结构举例如下:
1
2
3
4
|
stop: while ( get ()) {
a = 3;
continue stop;
}
|
截图如下:
2、JCEnhancedForLoop
语法树结构举例如下:
1
2
3
4
|
String[] strArray = null ;
for (String a:strArray){
System.out.println(a);
}
|
截图如下:
3、JCSwitch
语法树结构如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
static enum E {
A, B
}
public static void main(String args[]) {
E e = E.B;
switch (e) {
case A:
System. out .println( "A" );
break ;
case B:
System. out .println( "B" );
default :
System. out .println(0);
}
}
|
如下截图:
关于JCSwitch再举一个例子,如下:
1
2
3
4
5
6
7
8
9
10
11
|
switch (c) {
case 1:
int aaa = 1;
int bbb = 2;
case 2:
aaa = 2;
default : {
}
bbb = 4;
}
|
语法树截取后图如下所示.
接口实现了ExpressionTree,而实现类实现了JCExpression,如下:
1、LetExpression
语法树结构如下:
1
2
|
Integer foo = 0;
foo++;
|
截图如下:
2、JCAnnotation
语法树结构如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package com.test11;
public class Test1 {
@MzTargetPackage(isCanNull = true ,
num=100,
version = "1.1.0" ,
fruitColor=MzTargetPackage.Color.BULE,
value={ "a," , "b" , "c" },
compoundTest=@Code(author = "closedevice" ,date= "20161225" )
)
private void process() {
}
}
|
如下截图:
3、JCNewArray
语法树结构如下:
1
2
3
4
5
|
private void process() {
int [] a = new int [2];
int [] b = new int []{};
int [] c = {1,2,3};
}
|
如下截图:
JCNewClass的语法树结构如下:
1
2
3
4
5
6
7
|
class Outer<T>{
class Inner<D>{
public <X> Inner(String a,Integer ...ems){
}
}
}
|
1
2
3
4
5
|
new Outer<String>(). new <Number>Inner<Integer>( "arg" ,1,2,3){
public void m1(){
}
};
|
实例类与类声明时的两个值不太一样。
下面来看JCNewClass的语法结构,如下截图。
4、JCMethodInvocation
语法结构举个例子,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class Father {
public <T> void m1( int a) {
}
}
public class Test3 extends Father {
class C {
public void m() {
Test3. super .<String>m1( 1 );
}
}
}
|
查看调用方法m1()的语法结构如下:
接口实现了ParameterizedTypeTree,而实现类实现了JCExpression,如下:
1
2
3
4
5
6
7
8
|
/**
* A parameterized type, T<...>
*/
public static class JCTypeApply extends JCExpression implements ParameterizedTypeTree {
public JCExpression clazz;
public List<JCExpression> arguments;
}
|
5、JCTypeApply
语法结构举个例子,如下:
1
2
3
4
5
|
class X<T1 extends InputStream,T2>{
public void test(){
X<FileInputStream,?> x = null ;
}
}
|
如果截图展示了语法树结构:
6、JCWildcard
7、JCInstanceOf
举个例子,如下:
1
2
|
Object o = null ;
if (o instanceof A){}
|
8、JCPrimitiveTypeTree
当为 Object o = int.class.toString();
9、JCUnary
如++a的树节点如下:
1、JCTypeParameter
1
|
class B<T extends CA&IA&IB> { ...}
|
截图如下:
接口继承了StatementTree接口,而实现类实现了JCStatement类,不过有一个例外,如:
CaseTree 实现了JCStatement,但接口JCCase是继承了Tree。
1、JCContinue
语法树结构举例如下:
1
2
3
4
|
stop: while ( get ()) {
a = 3;
continue stop;
}
|
截图如下:
2、JCEnhancedForLoop
语法树结构举例如下:
1
2
3
4
|
String[] strArray = null ;
for (String a:strArray){
System.out.println(a);
}
|
截图如下:
3、JCSwitch
语法树结构如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
static enum E {
A, B
}
public static void main(String args[]) {
E e = E.B;
switch (e) {
case A:
System. out .println( "A" );
break ;
case B:
System. out .println( "B" );
default :
System. out .println(0);
}
}
|
如下截图:
关于JCSwitch再举一个例子,如下:
1
2
3
4
5
6
7
8
9
10
11
|
switch (c) {
case 1:
int aaa = 1;
int bbb = 2;
case 2:
aaa = 2;
default : {
}
bbb = 4;
}
|
语法树截取后图如下所示.
接口实现了ExpressionTree,而实现类实现了JCExpression,如下:
1、LetExpression
语法树结构如下:
1
2
|
Integer foo = 0;
foo++;
|
截图如下:
2、JCAnnotation
语法树结构如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package com.test11;
public class Test1 {
@MzTargetPackage(isCanNull = true ,
num=100,
version = "1.1.0" ,
fruitColor=MzTargetPackage.Color.BULE,
value={ "a," , "b" , "c" },
compoundTest=@Code(author = "closedevice" ,date= "20161225" )
)
private void process() {
}
}
|
如下截图:
3、JCNewArray
语法树结构如下:
1
2
3
4
5
|
private void process() {
int [] a = new int [2];
int [] b = new int []{};
int [] c = {1,2,3};
}
|
如下截图:
JCNewClass的语法树结构如下:
1
2
3
4
5
6
7
|
class Outer<T>{
class Inner<D>{
public <X> Inner(String a,Integer ...ems){
}
}
}
|
1
2
3
4
5
|
new Outer<String>(). new <Number>Inner<Integer>( "arg" ,1,2,3){
public void m1(){
}
};
|
实例类与类声明时的两个值不太一样。
下面来看JCNewClass的语法结构,如下截图。
4、JCMethodInvocation
语法结构举个例子,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class Father {
public <T> void m1( int a) {
}
}
public class Test3 extends Father {
class C {
public void m() {
Test3. super .<String>m1( 1 );
}
}
}
|
查看调用方法m1()的语法结构如下:
接口实现了ParameterizedTypeTree,而实现类实现了JCExpression,如下:
1
2
3
4
5
6
7
8
|
/**
* A parameterized type, T<...>
*/
public static class JCTypeApply extends JCExpression implements ParameterizedTypeTree {
public JCExpression clazz;
public List<JCExpression> arguments;
}
|
5、JCTypeApply
语法结构举个例子,如下:
1
2
3
4
5
|
class X<T1 extends InputStream,T2>{
public void test(){
X<FileInputStream,?> x = null ;
}
}
|
如果截图展示了语法树结构:
6、JCWildcard
7、JCInstanceOf
举个例子,如下:
1
2
|
Object o = null ;
if (o instanceof A){}
|
8、JCPrimitiveTypeTree
当为 Object o = int.class.toString();
9、JCUnary
如++a的树节点如下:
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。