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的树节点如下:

 

 

 

 

 

 

 

 

 

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM