【Groovy】编译时元编程 ( AST 语法树分析 | ClassNode 根节点 | 方法 Methods 节点 | 字段 Fields 节点 | 属性 Properties 节点 )

简介: 【Groovy】编译时元编程 ( AST 语法树分析 | ClassNode 根节点 | 方法 Methods 节点 | 字段 Fields 节点 | 属性 Properties 节点 )

一、AST 语法树分析


在上一篇博客 【Groovy】编译时元编程 ( 编译时元编程引入 | 声明需要编译时处理的类 | 分析 Groovy 类的 AST 语法树 ) 中 , 使用 GroovyConsole 工具分析了


class Student{
    def name
    def hello(){
        println "hello"
    }
}


类的 AST 语法树 , 下面分析该语法树 ;

image.png


展开 AST 语法树后的效果 :

image.png


在最顶层的根节点是 ClassNode 节点 , 在根节点下 , 有 方法 Methods 节点 , 字段 Fields 节点 , 属性 Properties 节点 ;

方法 Methods 节点 有 2 22 个 , 一个是默认的构造方法 , 一个是自定义的 hello 方法 , 对应

def hello(){
        println "hello"
    }


方法 ; 字段 Fields 节点 和 属性 Properties 节点 各一个 , 就是自定义的 name 字段 , 对应

def name

成员 ;

拿到了 AST 语法树之后 , 就可以获取到 Student 类的每一个节点 , 类 , 方法 , 属性 , 字段 ;


目录
相关文章
|
7月前
|
JavaScript
DOM 属性列表(命名节点图 Named Node Map)
`DOM`的`Named Node Map`代表元素的属性列表,它是一个自动更新的节点集合。当属性增删时,列表随之变化。以下代码示例加载"books.xml",获取第一个`<book>`元素的属性节点列表,`x.length`表示属性数量,`x.getNamedItem("category").nodeValue`显示"category"属性值,如"cooking",并输出属性总数1。
|
6月前
|
JavaScript
DOM 属性列表(命名节点图 Named Node Map)
**DOM的NamedNodeMap概括:**它表示元素的属性节点列表,如`<book>`的`attributes`。这个映射自动更新,添加或删除属性时响应变化。代码示例加载"books.xml",获取首个`<book>`的属性,`x.getNamedItem("category").nodeValue`显示类别,`x.length`显示属性数。输出示例:类别为"cooking",属性计数为1。
|
7月前
|
JavaScript
DOM 属性列表(命名节点图 Named Node Map)
`DOM`中的`Named Node Map`表示元素的属性列表,它是一个自动更新的节点集合。当属性增删时,列表随之变化。例如,加载"books.xml"到`xmlDoc`,然后获取第一个`<book>`元素的属性列表:`x=xmlDoc.getElementsByTagName('book')[0].attributes`。`x.length`显示属性数量,`x.getNamedItem("category").nodeValue`返回"category"属性的值。
|
7月前
|
XML Java 数据格式
java使用Document类解析xml并创建子标签节点
java使用Document类解析xml并创建子标签节点
|
7月前
|
JavaScript 算法 C语言
TypeScript算法专题 - blog5 - 单链表节点的`任意k个分组反转`的实现
TypeScript算法专题 - blog5 - 单链表节点的`任意k个分组反转`的实现
51 1
|
7月前
|
Java 开发者
JDK 21中的记录模式(Record Patterns):简化对象匹配与解构
本文将详细介绍JDK 21中引入的新特性——记录模式(Record Patterns)。记录模式是一种强大的语言特性,它允许开发者在switch表达式中使用简化的语法来匹配和解构记录类型(record types)。本文将解释记录模式的概念、语法、使用场景以及与传统模式匹配的区别,并通过示例代码展示记录模式在实际开发中的应用。
|
7月前
|
存储 Web App开发 缓存
详细解读 Fiber 节点的每一个属性含义
详细解读 Fiber 节点的每一个属性含义
102 0
Thymeleaf ${}中的表达式本质是OGNL-分支与迭代-包含其他模板文件
Thymeleaf ${}中的表达式本质是OGNL-分支与迭代-包含其他模板文件
74 0
【Groovy】编译时元编程 ( 方法拦截时用到的 AST 语法树节点 MethodNode 节点 | MethodNode 节点分析 | MethodNode 节点中的BlockStatement)
【Groovy】编译时元编程 ( 方法拦截时用到的 AST 语法树节点 MethodNode 节点 | MethodNode 节点分析 | MethodNode 节点中的BlockStatement)
208 0
【Groovy】编译时元编程 ( 方法拦截时用到的 AST 语法树节点 MethodNode 节点 | MethodNode 节点分析 | MethodNode 节点中的BlockStatement)

热门文章

最新文章