Java中的语法树结构

Posted 天涯泪小武

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的树节点如下:

 

原文链接:Java中的语法树结构 - 牧之丨 - 博客园

以上是关于Java中的语法树结构的主要内容,如果未能解决你的问题,请参考以下文章

Java中的语法树结构

Java中的语法树结构

java AST 抽象语法树

java AST 抽象语法树

java AST 抽象语法树

Java 中的屠龙之术:如何修改语法树?