Hive源码阅读–词法、语法解析–HiveLexerX/HiveParser

org\apache\hadoop\hive\ql\parse下有五个*.g文件,分别是:

  • HiveLexer.g :定义Hive关键字,及组成词组的合法字符
  • HiveParser.g:定义语法规则文件,引入了其他语法规则文件
  • SelectClauseParser.g :定义select语句的语法规则
  • FromClauseParser.g :定义from语句的语法规则
  • IdentifiersParser.g :定义函数、group等的语法规则

我们主要看前两个文件。

在进行阅读前,我们要安装一个工具-- ANTLR,下载地址为:https://www.antlr3.org/download.html

ANTLR 的使用

下载jar包后,直接双击就可以运行。
在这里插入图片描述
然后File–>New
在这里插入图片描述
新建一个.g文件。
在这里插入图片描述
起个名字叫ts,type为Combined Grammar
在这里插入图片描述
测试代码:

grammar ts;

-- 声明输出的是什么,这里相当于声明输出一个 AST Tree
options {
    output=AST;
    ASTLabelType=CommonTree;
}

-- expr声明的是词法  例如我要声明一个句子 我爱中国,这个句子的语法是主谓宾。
-- 主谓宾语法由三个词构成,相对于的词法为主语,谓语,宾语
-- ^相当于树的根点
expr	:	INT PLUS^ INT;

-- PLUS和INT是词对应的值 
-- 一个词法为INT,对应 0-9构成的字符串 后面的+号表示可以字符可以重复
-- 另一个词法是PLUS,对应 “+”这个字符串
PLUS 	:	'+';
INT	:	('0'..'9')+;

在这里插入图片描述

点击小甲虫运行,保存文件。

在这里插入图片描述

输入字符串
在这里插入图片描述
结果:
在这里插入图片描述

解析流程

在这里插入图片描述
在HIVE中,对SQL语句进行编译的是ANTLR。我们输入SQL语句,输出相应代码。

词法解析

词法解析就是将SQL语句中的关键字,特殊符号之类的有特殊含义的符号解释为一个token。

HiveLexerX.g中每一个关键字都有对应的声明,相当于对词的声明。
在这里插入图片描述

语法解析

语法解析就是分析字符串的语法构成与逻辑,比如这个句子是主谓宾结构呢还是主谓补结构呢。

HiveParser.g中有各种预先设置好的语法。
在这里插入图片描述

注意:不管是词法还是语法,都是可以自定义的。

例子

在这里插入图片描述

树图:
在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Hive是一个基于Hadoop的数据仓库基础结构,它提供了SQL查询和数据分析功能。Hive的源代码阅读是指对Hive项目的源代码进行逐行分析和理解,以深入了解Hive的内部工作原理和实现细节。 Hive的源代码阅读可以从导读开始。导读部分是Hive代码仓库中的一些重要文档和指南,它们提供了关于Hive项目的概述和指导。 首先,我们可以阅读Hive项目的README文件。该文件通常包含了对项目的介绍、功能特点和使用说明。README文件一般会介绍Hive的目标、核心组件和HiveQL查询语言等内容,为我们提供了整体了解Hive的入口。 接下来,我们可以查看Hive项目中的文档目录。在这个目录下,我们可以找到各种文档、指南和设计文档,它们详细描述了Hive的不同方面和内部机制。这些文档可以帮助我们了解Hive的体系结构、数据处理流程、优化技巧等内容,为后续阅读源代码提供了必要的背景知识。 此外,还可以关注Hive项目的WIKI页面。Hive的WIKI页面常常有丰富的内容,包括开发指南、常见问题解答等。这些页面中提供了一些较为具体和实用的信息,可以帮助我们更好地理解Hive的源代码。 在阅读Hive源代码时,我们应该注重核心模块和关键类的分析。可以从查询解析器、查询优化器和执行引擎等模块开始阅读。这些模块负责将HiveQL查询转化为Hadoop任务并执行查询操作。 最后,我们还可以参考Hive源代码中的注释和代码文档。良好的代码注释可以帮助我们理解代码的意图和实现细节,而代码文档则可以提供更加详细的说明和使用方法。 综上所述,Hive源码阅读的导读包括了阅读README文件、查看文档目录和WIKI页面、重点关注核心模块和关键类的分析,以及参考代码注释和文档等内容。通过导读,我们可以为接下来的源码阅读做好准备,更好地理解Hive的工作原理和实现方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒 暄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值