首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

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

文章目录 一、AST 语法树分析 一、AST 语法树分析 ---- 在上一篇博客 【Groovy】编译时元编程 ( 编译时元编程引入 | 声明需要编译时处理的类 | 分析 Groovy 类的 AST 语法树...GroovyConsole 工具分析了 class Student{ def name def hello(){ println "hello" } } 类的 AST...语法树 , 下面分析该语法树 ; 展开 AST 语法树后的效果 : 在最顶层的根节点是 ClassNode 节点 , 在根节点下 , 有 方法 Methods 节点 , 字段 Fields...节点 , 属性 Properties 节点 ; 方法 Methods 节点 有 2 个 , 一个是默认的构造方法 , 一个是自定义的 hello 方法 , 对应 def hello(){...成员 ; 拿到了 AST 语法树之后 , 就可以获取到 Student 类的每一个节点 , 类 , 方法 , 属性 , 字段 ;

89820

JavaScript 混淆与逆向必读之 AST 节点类型名词基础

AST 节点类型名词基础 语法树相关的知识和技巧需要一定的时间学习(大概一两个月),对此感兴趣的你可以通过以下几篇实战型文章了解它的具体应用: AST 还原 obfuscator 混淆[3] 操作AST...类型 上面列举了常用的几个 AST 解析库,虽然各个库解析同一份代码得到的结构不完全一致,但用于表示节点类型的名词几乎都是一致的,例如 VariableDeclaration 代表这是变量声明语句、CallExpression...掌握节点类型的名词,有助于我们在阅读语法树结构时更清晰地了解节点的作用和意图,也可以说节点名词是我们成为代码混淆大师或代码逆向大师的必经之路,非常重要!...我们以下图的代码为例,看看 AST 中常用的节点类型名词有哪些。 ?...将上面的代码复制到 AST Explorer 便可以得到语法树,根据左侧的代码和右侧的语法树,我们可以统计语法树节点名词和具体描述,如下表: 序号 类型原名称 中文名称 描述 1 Program 程序主体

1.6K20

【Groovy】编译时元编程 ( 方法拦截时用到的 AST 语法树节点 MethodNode 节点 | MethodNode 节点分析 | MethodNode 节点中的BlockStatement)

文章目录 一、方法拦截时用到的 AST 语法树节点 MethodNode 节点 二、MethodNode 节点分析 三、MethodNode 节点中的 BlockStatement 集合 一、方法拦截时用到的...AST 语法树节点 MethodNode 节点 ---- 参考 【Groovy】编译时元编程 ( 编译时元编程引入 | 声明需要编译时处理的类 | 分析 Groovy 类的 AST 语法树 ) 三、分析...Groovy 类的 AST 语法树 博客章节 , 分析 class Student{ def name def hello(){ println "hello"...} } 类的 AST 语法树中的 hello 方法对应的 MethodNode 节点 ; 该 MethodNode 节点信息如下 , 关注该 MethodNode 节点下的 code 字段 , 二...、MethodNode 节点分析 ---- MethodNode 节点原型如下 : /** * 表示方法声明 * * @author <a href="mailto:james@coredevelopers.net

24310

一览美图数据开发与SQL解析

图 6 其中 HQL 转化成 mapredurce 的过程,分为以下 6 个阶段: ?...1.HQL 词法、语法解析,将 HQL 转化为抽象语法树 AST 语法解析阶段,Hive 利用 Antlr 将用户提交的 HQL 语句解析成一棵抽象语法树。...图 8 这里以一个简单的 sql 来说明 AST 的各个节点,图中生成一个 TOK_INSERT 节点,这个节点是在语法改写中特意增加了的一个节点。...遍历 AST,抽象出查询的基本组成单元 QueryBlock AST 仍然非常复杂,不足以结构化也不方便直接翻译为 MapReduce 程序,AST Tree 转化为 QueryBlock 就是将 SQL...图 12 过程中值得注意的是: 对用户提交的 sql 进行校验与限制,主要复用了第一阶段生成的 AST 和第二阶段生成的 QB; 递归 QB 从 AST节点获取操作、表、查询条件等信息; 判断操作和表是否有危险行为与权限

1.1K20

快速学习-Hive 基本概念

本质是:将 HQL 转化成 MapReduce 程序 ?...驱动器:Driver (1)解析器(SQL Parser):将 SQL 字符串转换成抽象语法树 AST,这一步一般都用 第三方工具库完成,比如 antlr;对 AST 进行语法分析,比如表是否存在、...(2)编译器(Physical Plan):将 AST 编译生成逻辑执行计划。 (3)优化器(Query Optimizer):对逻辑执行计划进行优化。...1.4 Hive 和数据库比较 由于 Hive 采用了类似 SQL 的查询语言 HQL(Hive Query Language),因此很容易将 Hive 理解为数据库。...,2009 年的规模在 4000 台节点左右)。而数据库由于 ACID 语义的严格限制,扩展行非常有限。目前最先进的并行数据库 Oracle 在理论上的扩展能力也只有 100 台左右。

51510

【Groovy】编译时元编程 ( ASTTransformation#visit 方法简介 | org.codehaus.groovy.ast.ModuleNode 脚本节点 )

文章目录 一、ASTTransformation#visit 方法简介 二、org.codehaus.groovy.ast.ModuleNode 脚本节点 一、ASTTransformation#visit...@2609b277] org.codehaus.groovy.control.SourceUnit@1fd14d74 在 visit 方法中 , ASTNode[] nodes 参数是 AST 语法树根节点..., SourceUnit source 参数代表源码 ; 二、org.codehaus.groovy.ast.ModuleNode 脚本节点 ---- ASTNode[] nodes 参数是 AST...语法树节点 , 该数组的值是 [org.codehaus.groovy.ast.ModuleNode@2609b277] AST 语法树节点是 org.codehaus.groovy.ast.ModuleNode...类型对象 ; org.codehaus.groovy.ast.ModuleNode 是 Groovy 脚本的语法树节点 ; 其内部封装的 List classes = new LinkedList

19210

Hive Query生命周期 —— 钩子(Hook)函数篇

无论你通过哪种方式连接Hive(如Hive Cli、HiveServer2),一个HQL语句都要经过Driver的解析和执行,主要涉及HQL解析、编译、优化器处理、执行器执行四个方面。 ?...以Hive目前原生支持计算引擎MapReduce为例,具体处理流程如下: HQL解析生成AST语法树 Antlr定义SQL的语法规则,完成SQL词法和语法解析,将SQL转化为抽象语法树AST Tree...语法分析得到QueryBlock 遍历AST Tree,抽象出查询的基本组成单元QueryBlock 生成逻辑执行计划 遍历QueryBlock,翻译为执行操作树Operator Tree Logical...HiveSemanticAnalyzerHook的postAnalyze 与preAnalyze同属于一个钩子类,配置参数相同,会执行所有配置的语义分析hooks,但它位于Hive的语法分析之后,可以获取HQL...* SessionState、UGI、HQL输入表及分区信息,HQL输出表、分区以及本地和hdfs文件目录信息 */ @Deprecated public void run(SessionState

3.4K40

EMR(弹性MapReduce)入门之数据仓库工具Hive组件使用(十一)

最初用于解决海量结构化的日志数据统计问题 MapReduce编程的不便性 HDFS上的文件缺少Schema(字段名,字段类型等) Hive是什么 1、构建在Hadoop之上的数据仓库 2、Hive定义了一种类SQL查询语言:HQL...4 、Driver : 编译器 (Compiler) ) ,优化器 (Optimizer) ) ,执行器 (Executor ) Driver 组件完成 HQL 查询语句从词法分析,语法分析,编译,优化...生成的逻辑执行计划存储在 HDFS 中,并随后由 MapReduce 调用执行 Hive 的核心是驱动引擎, 驱动引擎由四部分组成: (1) 解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST...优化器是对逻辑执行计划进行优化 (4) 执行器:执行器是调用底层的运行框架执行逻辑执行计划 Hive工作原理 接收到一个sql,后面做的事情包括: 1.词法分析/语法分析:使用antlr将SQL语句解析成抽象语法树-AST...,而因为所在节点/data/emr/hive/tmp(或/tmp目录)目录一直未清理,创建目录数量(Inode数量)到上限,所以创建目录失败了。

1.8K20

聊聊Hive数据血缘——从Atlas没有列级血缘的Bug讲起

环境高级配置代码段 HIVE_AUX_JARS_PATH=/usr/local/src/atlas/apache-atlas-2.1.0/hook/hive 需要将配置好的Atlas包发往各个hive节点后重启集群...如果Hive通过MapReduce作为计算引擎为例,具体处理流程如下: HQL解析生成AST语法树 Antlr定义SQL的语法规则,完成SQL词法和语法解析,将SQL转化为抽象语法树AST Tree 语法分析得到...QueryBlock 遍历AST Tree,抽象出查询的基本组成单元QueryBlock 生成逻辑执行计划 遍历QueryBlock,翻译为执行操作树Operator Tree Logical Optimizer...* SessionState、UGI、HQL输入表及分区信息,HQL输出表、分区以及本地和hdfs文件目录信息 */ @Deprecated public void run(SessionState...代表参与DAG的节点元素,vertexType有COLUMN和TABLE两个值 edges:边。

1.5K10

AST 基础学习以及躲坑技巧

这里我们关注的 const 就在一个 VariableDeclaration 的节点上面,开始位置为 0。 一个个 Node 节点,组成了一份描述我们代码的树状结构,也就是 AST。...词法分析和语法分析在这不展开,有很多库帮我们直接拿到代码的 AST,比如 acorn 和 babylon。 转换 转换就是对 AST 进行遍历,并在过程中对所需的节点(Node)进行修改操作。...生成 把修改后的 AST,变成字符串形式的代码,这里还可以顺便做一下 source maps。 如何进行最复杂的转换? 1、我们要对 AST 进行深度优先的遍历,遍历每一个节点。...2、在 AST 领域,有一个叫访问者模式(visitor)的概念,用 visitor 来访问每个节点和里面的属性。...2、作用域(Scopes) 除了上面通过递归方式,来减少错误的变量转换外,我们的变量还有可能是在外层函数做的定义,visitor 拿到的外层函数中的一个引用,此时贸然修改,会导致意外发生。

1K40
领券