在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
中有各种预先设置好的语法。
注意:不管是词法还是语法,都是可以自定义的。
例子
树图: