Java中的语法树结构_sed

 

1、JCTypeParameter





1




​class​​ ​​B<T extends CA&IA&IB> { ...}​



截图如下:  

Java中的语法树结构_接口实现_02

 

接口继承了StatementTree接口,而实现类实现了JCStatement类,不过有一个例外,如:

CaseTree 实现了JCStatement,但接口JCCase是继承了Tree。 

Java中的语法树结构_语法树_03

Java中的语法树结构_语法树_04

 

1、JCContinue

语法树结构举例如下: 





1


2


3


4




​stop: ​​​​while​​ ​​(​​​​get​​​​()) {​


​a = 3;​


​continue​​ ​​stop;​


​}​



截图如下:

Java中的语法树结构_调用方法_05

 

2、JCEnhancedForLoop

语法树结构举例如下:





1


2


3


4




​String[] strArray = ​​​​null​​​​;​


​for​​​​(String a:strArray){​


​System.out.println(a);​


​}​



截图如下:  

Java中的语法树结构_语法树_06

 

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);​


​}​


​}​



如下截图:

Java中的语法树结构_语法树_07

关于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;​


​}  ​



语法树截取后图如下所示.

Java中的语法树结构_调用方法_08

 

 

接口实现了ExpressionTree,而实现类实现了JCExpression,如下:

Java中的语法树结构_语法树_09

Java中的语法树结构_sed_10

 

1、LetExpression

语法树结构如下: 





1


2




​Integer foo = 0;​


​foo++;​



截图如下:

Java中的语法树结构_sed_11 

 

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() {​


 


​}​


​}​



如下截图:

Java中的语法树结构_语法树_12

3、JCNewArray

语法树结构如下: 





1


2


3


4


5




​private​​ ​​void​​ ​​process() {​


​int​​​​[] a = ​​​​new​​ ​​int​​​​[2];​


​int​​​​[] b = ​​​​new​​ ​​int​​​​[]{};​


​int​​​​[] c = {1,2,3};​


​}​



如下截图:

Java中的语法树结构_语法树_13

Java中的语法树结构_语法树_14

Java中的语法树结构_sed_15 

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的语法结构,如下截图。

Java中的语法树结构_语法树_16  

  

Java中的语法树结构_调用方法_17

Java中的语法树结构_语法树_18 

 

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()的语法结构如下:

Java中的语法树结构_调用方法_19

 

接口实现了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​​​​;​


​}​


​}  ​



如果截图展示了语法树结构:

Java中的语法树结构_sed_20 

6、JCWildcard

Java中的语法树结构_sed_21 

7、JCInstanceOf

举个例子,如下:





1


2




​Object o = ​​​​null​​​​;​


​if​​ ​​(o instanceof A){}  ​


截图如下:


Java中的语法树结构_语法树_22 

8、JCPrimitiveTypeTree

 当为 Object  o = int.class.toString();

Java中的语法树结构_语法树_23

 

9、JCUnary

如++a的树节点如下:

Java中的语法树结构_接口实现_24

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



Java中的语法树结构_sed

 

1、JCTypeParameter





1




​class​​ ​​B<T extends CA&IA&IB> { ...}​



截图如下:  

Java中的语法树结构_接口实现_02

 

接口继承了StatementTree接口,而实现类实现了JCStatement类,不过有一个例外,如:

CaseTree 实现了JCStatement,但接口JCCase是继承了Tree。 

Java中的语法树结构_语法树_03

Java中的语法树结构_语法树_04

 

1、JCContinue

语法树结构举例如下: 





1


2


3


4




​stop: ​​​​while​​ ​​(​​​​get​​​​()) {​


​a = 3;​


​continue​​ ​​stop;​


​}​



截图如下:

Java中的语法树结构_调用方法_05

 

2、JCEnhancedForLoop

语法树结构举例如下:





1


2


3


4




​String[] strArray = ​​​​null​​​​;​


​for​​​​(String a:strArray){​


​System.out.println(a);​


​}​



截图如下:  

Java中的语法树结构_语法树_06

 

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);​


​}​


​}​



如下截图:

Java中的语法树结构_语法树_07

关于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;​


​}  ​



语法树截取后图如下所示.

Java中的语法树结构_调用方法_08

 

 

接口实现了ExpressionTree,而实现类实现了JCExpression,如下:

Java中的语法树结构_语法树_09

Java中的语法树结构_sed_10

 

1、LetExpression

语法树结构如下: 





1


2




​Integer foo = 0;​


​foo++;​



截图如下:

Java中的语法树结构_sed_11 

 

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() {​


 


​}​


​}​



如下截图:

Java中的语法树结构_语法树_12

3、JCNewArray

语法树结构如下: 





1


2


3


4


5




​private​​ ​​void​​ ​​process() {​


​int​​​​[] a = ​​​​new​​ ​​int​​​​[2];​


​int​​​​[] b = ​​​​new​​ ​​int​​​​[]{};​


​int​​​​[] c = {1,2,3};​


​}​



如下截图:

Java中的语法树结构_语法树_13

Java中的语法树结构_语法树_14

Java中的语法树结构_sed_15 

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的语法结构,如下截图。

Java中的语法树结构_语法树_16  

  

Java中的语法树结构_调用方法_17

Java中的语法树结构_语法树_18 

 

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()的语法结构如下:

Java中的语法树结构_调用方法_19

 

接口实现了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​​​​;​


​}​


​}  ​



如果截图展示了语法树结构:

Java中的语法树结构_sed_20 

6、JCWildcard

Java中的语法树结构_sed_21 

7、JCInstanceOf

举个例子,如下:





1


2




​Object o = ​​​​null​​​​;​


​if​​ ​​(o instanceof A){}  ​


截图如下:


Java中的语法树结构_语法树_22 

8、JCPrimitiveTypeTree

 当为 Object  o = int.class.toString();

Java中的语法树结构_语法树_23

 

9、JCUnary

如++a的树节点如下:

Java中的语法树结构_语法树_48