里抽象语法树_Hive源码系列(八)编译模块之词法、语法解析 (下)

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

b0f98eb9ea96a5dd25133657356c78c7.png

1、Hive的语法文件

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

语法文件是以.g结尾

e4090b3251ed0c8c008bec161b555bd1.png

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

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

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

a9cc262b3ea98e2a2952f7df27e33d38.png

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

18ccb095a36e88244e581da21391c4d6.png

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

3、运行Hive的语法文件

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

ac15dff24de54409cdf82cb2bfdb12ae.png

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

0179be51125afd8c154aeddae7ceb909.png

生成的抽象语法树:

5c1a5eef1eacb71ab0a3e2b360e1da6e.png

4、Hive中获取ASTTree

Driver.java

11a16759b8ecf9dbab614bb69089e7d8.png

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

6c319fd264ff5331325775926ef18728.png

输出astree:

eea4167336cbc82cf791a5bc6e031652.png

福利:

Hive源码系列课程第一部分 【Hive源码环境搭建】已经录制完成了:

网易云课堂地址:Hive源码环境搭建

前50名领完优惠券后只用1.9 元就能学习,最最重要的是,能获取整套已经搭建好的环境以及入群学习,有需要的同学快来加入吧!

905a9bfaf74b894664491ae4af554eac.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值