专栏首页数据仓库践行者Hive源码系列(七)编译模块之词法、语法解析 (下)

Hive源码系列(七)编译模块之词法、语法解析 (下)

这篇主要介绍hive词法、语法解析的源码 以及hive AstTree

1、Hive的语法文件

对一个已有的项目进行语法分析,首先是要找到语法分析文件,分析语法文件之间的关系,然后根据语法分析文件提供的接口,确定语法解析在这个体系中所处的位置。

语法文件是以.g结尾

基本可以确定了 ql下面就是需要找到东西

  • HiveLexer.g 是做词法分析的,定义了所有用到的token
  • HiveParser.g 是做语法解析的
  • FromClauseParser.g from从句语法解析
  • SelectClauseParser.g select 从句语法解析
  • IdentifiersParser.g 自定义函数的解析

2、Hive的语法文件间的关系

HiveParser.g 有一行import SelectClauseParser,FromClauseParser, IdentifiersParser

SelectClauseParser, FromClauseParser,IdentifiersParser 包含在HiveParser.g中antlr v3.1开始,允许在逻辑上把一个大语法划分成几大块,独立实现,然后合并在一起,是为了解决把所有语法塞入到一个文件里导致编译出来的java文件过大和逻辑多了之后不容易阅读的问题。

3、运行Hive的语法文件

用antlrworks打开HiveParser.g文件,如果下图:

点击小甲虫,如果下图,输入一条sql语句:

生成的抽象语法树:

4、Hive中获取ASTTree

Driver.java

ParseDriver.parse()方法 获取asttree,写测试类来观察具体获取的asttree:

输出astree:

本文分享自微信公众号 - 数据仓库践行者(dw_keeper),作者:小萝卜算子

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Hive源码系列(四)hive2.1.1源码包介绍及调试

    这次主要对hive源码包及hive的两种调试方式做了介绍,这篇结束后,整个源码调试环境的搭建已经完成。

    数据仓库践行者
  • Flink_sql_client1.10源码在IDEA中集成hive并运行

    最近一直在跟进flink_sql,为以后做更深入的了解做准备,这篇主要记录一下运行sql_client源码的过程~~

    数据仓库践行者
  • Hive源码系列(二)hive2.1.1源码编译并编译成eclipse项目

    这是一篇工具类的文章,工欲善其事必先利其器,要分析调试hive源码,必须搭建一套hive的运行环境。还记得第一次搭建hive源码调试环境,用了一个月的时间,才完...

    数据仓库践行者
  • 2天1夜,领略了沙漠腹地工作人员的艰辛

    12月20日至21日,为了检查和试验安装到地震队的北斗终端,人生第一次深入到沙漠腹地,体验了2天野外地震队的生活。

    申龙斌
  • Android SMS(二)—— 读取短信保存到 SQLite

    Android 之 SMS 短信在Android系统中是保存在SQLite数据库中的,但不让其它程序访问(Android系统的安全机制)

    阳光岛主
  • python self.__class__.__name__ 理解

    于小勇
  • JS-记住用户名【cookie封装引申】

    xing.org1^
  • LeetCode刷题DAY 9:两数之和II

    本题可以用哈希、双指针、二分查找三个思路进行求解,同时应建立有序列表与二分法的思维反射。

    三猫
  • 【Rust 日报】2020-05-01 tco: 用过程宏实现的尾递归优化能力

    发布:RustCrypto: p256 和 k256 v0.2.0: 纯 Rust NIST P-256 和 secp256k1 曲线算法

    MikeLoveRust
  • pytest 测试框架学习(11):pytest.raises

    raises: 在断言一些代码块或者函数时会引发意料之中的异常或者其他失败的异常,导致程序无法运行时,使用 raises 捕获匹配到的异常,可以继续让代码正常运...

    Mokwing

扫码关注云+社区

领取腾讯云代金券