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

本文主要介绍Hive词法、语法解析的源码以及Hive AstTree。先阐述了Hive的语法文件,包括词法分析、语法解析等文件;接着说明语法文件间的关系;还介绍了运行语法文件的方法;最后讲解在Hive中获取ASTTree的方式,文末还提及Hive源码环境搭建课程福利。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

a5beed5b3e8692d8365698508889a57f.png

1、Hive的语法文件

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

语法文件是以.g结尾

ab82f87ad85d540d929d0f56ad4b055c.png

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

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

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

cf49a55ca1beee98e1d1b2ed6f1cb412.png

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

00e871cf55c9e886a3427854387fa0fc.png

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

3、运行Hive的语法文件

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

c5775990d2aa86a56524ab8725be771b.png

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

939271323c279df626154dba078a5f0c.png

生成的抽象语法树:

1f17e9f7bb9dfbab1922f6a307c9b50d.png

4、Hive中获取ASTTree

Driver.java

7e2b1799884fa35bd8086ae78c861341.png

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

2808ad338a263bd22e95c905a758c0e1.png

输出astree:

a4ac4b76e72a762530bc5fbf19339feb.png

福利:

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

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

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

544fbd239bb04ee24e3d1399c14a808a.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值