Hive-技术补充-初识ANTLR

一、背景

要清晰的理解一条Hql是如何编译成MapReduce任务的,就必须要学习ANTLR。下面是ANTLR的官方网址,下面让我们一起来跟着官网学习吧,在学习的过程中我参考了《antlr4权威指南》,你也可以读下这本书,一定会对你有所帮助。

https://www.antlr.org/

二、ANTLR是什么

ANTL是由谷歌的技术负责人Terence Parr研发的,他之前是旧金山大学的数据科学/计算机科学教授。

ANTLR(ANother Tool for Language Recognition)是一个强大的语法分析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。它被广泛用于构建语言、工具和框架。根据语法,ANTLR生成了一个可以构建和遍历解析树的解析器。

Hive、Pig、Oracle的 IDE及其迁移工具、NetBeans IDE、Hibernate中都使用到了ANTLR。

ANTLR是java世界实现编译器的不二之选

回想下你用java、c++、python等等语言编写的程序是怎么让计算机运行的,

比如c:

编写源文件xxx.c ----预处理--->xxx.i---编译--->xxx.s---汇编--->xxx.o---链接--->可执行文件

比如java:

编写源文件xxx.java---编译--->字节码文件xxx.class---解释--->---运行--->

你会发现它们都需要经过编译阶段,我们只需要按照每种语言的语法编写即可,那么编译器都做了什么呢?

扫描、语法分析、语义分析、源代码优化、代码生成和目标代码优化

Hive中的hql是一种语言,也需要被编译分析,而ANTLR就是来做这件事情的

三、安装ANTLR

1、安装jdk

比较简单,我的这篇博客<CDH6.3.1离线安装>中有涉及

2、下载ANTLR

https://www.antlr.org/download/antlr-4.13.1-complete.jar

把jar包放到/usr/local/lib下并配置环境变量

vi /etc/profile

export CLASSPATH=".:/usr/local/lib/antlr-4.13.1-complete.jar"

source /etc/profile

注意,该版本的ANTLR的class版本是55.0,对应要安装jdk11

3、验证是否正常

4、做个别名

vi ~/.bash_profile

alias antlr4='java -jar /usr/local/lib/antlr-4.13.1-complete.jar'

source ~/.bash_profile

四、ANTLR的hello world

1、编写语法规则文件

vi HelloWorld.g4

grammar HelloWorld; //定义一个名为HelloWord的语法

r :'helloworld' ID; //匹配一个关键词hello_word和一个紧随其后的标识符

ID :[a-z]+; //匹配小写字母组成的标识符

WS :[ \t\r\n]+ -> skip; //或略空格、Tab、换行符

2、生成词法分析器和语法分析器

antlr4 HelloWorld.g4

先编译生成的java文件

javac *.java

HelloWorldLexer.java 和 HelloWorldParser.java 组成了可以运行的语法识别程序,不过我们还缺少一个main方法来触发这个程序,幸运的是ANTLR为我们提供了一个TestRig的调试程序,它使用java的反射机制来调用编译后的识别程序。为了方便使用,我们给它起个别名

vi ~/.bash_profile

alias grun='java org.antlr.v4.runtime.misc.TestRig'

source ~/.bash_profile

3、测试词法分析器和语法分析器

grun HelloWorld r -tokens

grun HelloWorld r -tokens //使用HelloWorld和r规则启动TestRig

hello world hi //输入要识别的语句 输入EOF或者linux按Ctrl+D结束

//以下都是grun的输出的词法符号列表

@0,0:4='hello',\,1:0\] //@0表示 hello 位于第1个位置 字符索引范围是0:4,1行0位置 \[@1,6:10='world',\,1:6\] //world 位于第2个位置 字符索引范围是6:10,1行6位置 \[@2,12:13='hi',\,1:12\] //hi 位于第3个位置 字符索引范围是12:13,1行12位置 \[@3,15:14='\',\,2:0\] //EOF 位于第4个位置 字符索引范围是15:14,2行0位置 line 1:0 missing 'hello_word' at 'hello' 还可以增加 -tree参数以LISP的格式打印语法分析树 grun HelloWorld r -tokens -tree ![](https://file.jishuzhan.net/article/1769588185647550465/7c68c6b2c8b4c3011843b8ef3981574b.webp)

相关推荐
还是大剑师兰特7 小时前
Hadoop面试题及详细答案 110题 (86-95)-- Hadoop生态系统工具
hadoop·大剑师·hadoop面试题
yumgpkpm7 小时前
CMP (类Cloudera) CDP7.3(400次编译)在华为鲲鹏Aarch64(ARM)信创环境中的性能测试过程及命令
大数据·hive·hadoop·python·elasticsearch·spark·cloudera
Q26433650238 小时前
大数据实战项目-基于K-Means算法与Spark的豆瓣读书数据分析与可视化系统-基于python的豆瓣读书数据分析与可视化大屏
大数据·hadoop·机器学习·数据分析·spark·毕业设计·kmeans
大数据CLUB10 小时前
基于spark的抖音短视频数据分析及可视化
大数据·hadoop·分布式·数据分析·spark
yumgpkpm10 小时前
大数据综合管理平台(CMP)(类Cloudera CDP7.3)有哪些核心功能?
hive·hadoop·elasticsearch·zookeeper·big data
板凳坐着晒太阳10 小时前
Hive 删除分区语句卡死问题
数据仓库·hive·hadoop
Q26433650231 天前
【有源码】基于Hadoop生态的大数据共享单车数据分析与可视化平台-基于Python与大数据的共享单车多维度数据分析可视化系统
大数据·hadoop·python·机器学习·数据分析·spark·毕业设计
计算机毕业设计木哥1 天前
计算机毕设选题推荐:基于Hadoop和Python的游戏销售大数据可视化分析系统
大数据·开发语言·hadoop·python·信息可视化·spark·课程设计
嘉禾望岗5031 天前
hive on tez运行及hive ha搭建
数据仓库·hive·hadoop
RestCloud1 天前
PostgreSQL的数据集成之路:ETL+CDC实现实时多源聚合
数据库·数据仓库·postgresql·etl·数据处理·数据传输·数据同步