java实现词法分析和语法分析_Hive源码系列(八)编译模块之词法、语法解析 (下)...

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

70e44e4b7dc85ac1702b31a4518e3857.png

1、Hive的语法文件

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

语法文件是以.g结尾

ed5deb8141c9e00b5df89d0de2a495ad.png

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

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

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

c741343ffcea0f6785e7779495d5b144.png

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

7ea9f7095f27957ac2943b51f6056d89.png

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

3、运行Hive的语法文件

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

0d065101eca2869055cbbd71774fdd87.png

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

260d0f06224d377dcb567682dbfd5fce.png

生成的抽象语法树:

acd49d0454e66c6f7d152911c2a78f78.png

4、Hive中获取ASTTree

Driver.java

72481748a1a019d43cf81dcc933de6bb.png

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

6078aacf0802a806dbac04adc371444b.png

输出astree:

6ae6f3fe5548eb1fb630ad9fe083e89e.png
a86e4f706406bbf7d1724ec4ab247cd5.png

Hey!

我是小萝卜算子

在成为最厉害最厉害最厉害的道路上

很高兴认识你

觉得有用的话

欢迎关注公众号哦

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值