zoukankan      html  css  js  c++  java
  • 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的树节点如下:



  • 相关阅读:
    C 语言模拟 C++ 的多态(利用指针函数)
    emplace_back 使用零拷贝添加元素验证
    const char*和char* 以及string的相互转化.md
    strcpy和memcpy用法(待完善测试用例)
    结构体的比较
    引用在汇编层次上面的解释
    信息安全管理33_防病毒管理策略
    信息安全管理32_通用安全管理checklist
    信息安全管理31_信息安全符合性管理策略
    信息安全管理30_运行管理checklist
  • 原文地址:https://www.cnblogs.com/exmyth/p/11390315.html
Copyright © 2011-2022 走看看