`
denniszjw
  • 浏览: 17710 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hive中antlr语法文件的编译

    博客分类:
  • hive
阅读更多
最近项目需要想用到hive中antlr的sql语法解析做二次开发,之前看hive源码的时候编译过,也遇到不少问题,现在居然忘了,看来好记性不如烂笔头,差记性就更加得多写写了。

编译是在windows xp环境下进行的,下载所需要的文件如下:



    antlr-2.7.7.jar

    antlr-3.0.1.jar

    stringtemplate-3.1b1.jar

    Hive.g



文件放在目录C:\hive\BAK目录下,DOS命令行进入到目录,输入:
C:\hive\BAK>java -cp antlr-2.7.7.jar;antlr-3.0.1.jar;stringtemplate-3.1b1.jar or
g.antlr.Tool Hive.g

会输出:
ANTLR Parser Generator  Version 3.0.1 (August 13, 2007)  1989-2007
warning(200): Hive.g:1461:5: Decision can match input such as "Identifier DOT Id
entifier" using multiple alternatives: 1, 2
As a result, alternative(s) 2 were disabled for that input

再看目录下会增加几个文件
HiveParser.java
Hive.tokens
Hive__.g
HiveLexer.java

  HiveLexer.java和 HiveParser.java分别是生成的对应词法和语法分析类文件
  Hive__.g对应HiveLexer.java的词法分析规范
  Hive.tokens定义了词法分析后的所有token

需要说明的是antlr-3.0.1.jar是在antlr-2.7.7.jar的基础上进行的开发,有依赖关系。

编译中遇到的错误:
1、有帖子说编译格式为:
C:\hive\BAK>java antlr.Tool Hive.g
ANTLR Parser Generator   Version 2.7.7 (20060906)   1989-2005
Hive.g:17:1: unexpected token: grammar
error: Token stream error reading grammar(s):
Hive.g:247:1: unexpected char: '@'
Hive.g:17:1: rule classDef trapped:
Hive.g:17:1: unexpected token: grammar
error: aborting grammar 'unknown grammar' due to errors
TokenStreamException: unexpected char: '@'

原因是没有找到对应版本的jar包,应该运行是antlr-3.0.1.jar,而且antlr-3.0.1.jar对应Tool的目录是org.antlr.Tool

2、编译时没有加classpath
C:\hive\BAK>java org.antlr.Tool Hive.g
Exception in thread "main" java.lang.NoClassDefFoundError: org/antlr/Tool


3、NoClassDefFoundError错误
Exception in thread "main" java.lang.NoClassDefFoundError: org/antlr/stringtempl
ate/StringTemplateErrorListener
        at org.antlr.Tool.main(Tool.java:67)

是因为用到的stringtemplate-3.1b1.jar包没有导入到classpath中

总的来说antlr和flex+yacc比较像,使用起来还算比较方便,细心点就行~
分享到:
评论
1 楼 winter_sunny 2014-02-14  
org.antlr.Tool 在哪下载呢,可以给传个么

相关推荐

    基于 Antlr4 的 Hive SQL 解析.zip

    3. **创建Hive SQL的Antlr4语法规则**:根据Hive SQL的语法特性,编写对应的Antlr4语法规则文件(通常以.g4为扩展名)。 4. **实现解析器**:利用Antlr4生成的解析器类,处理输入的Hive SQL语句,构建并遍历AST,以...

    hive词法语法分析草稿0.3

    ANTLR语法的简单介绍会涵盖其基本语法元素,如规则定义、动作代码和语法错误处理。ANTLRworks作为ANTLR的图形化开发环境,可以帮助开发者直观地查看和调试语法结构。 语义分析阶段,即第五章,是理解Hive查询逻辑的...

    Hive SQL 编译过程详解

    - **Phase1 SQL词法,语法解析**:Hive使用Antlr工具解析SQL,生成抽象语法树(AST Tree)。Antlr是一个强大的解析工具,能够解析特定的语言结构,如HiveQL。 - **Phase2 AST Tree到QueryBlock**:接下来,Hive...

    hive3.1.0-antrl3.5.2-Hivegrammar源码.zip

    HiveSql后续的编译过程全都基于AST Tree,所以我们想要完整理解hive sql的编译过程,需要前置了解一下antlr是怎么工作的。 HiveLexer.g:词法解析文件,定义了所有用到的token。 HiveParser.g:语法解析文件,实现了...

    antlrworks-1.5.1.jar

    编辑ANTLR语法文件时,“语法图”窗口显示当前规则的直观表示。此功能提供语法元素的自然表示,并且是提供自定义功能以增强特定语言的特征的示例。另外,双击源代码图中的元素将立即跳转到相关的源代码。antlrworks...

    antlr-3.4.jar

    antlr有 v2 v3 v4多个版本并存,中文文档多数是v2的, hive 1.1.0版本在注释中提到了antlr 3.4。ANTLR将上述结合起来,它允许我们定义识别字符流的词法规则和用于解释Token流的语法分析规则。然后,ANTLR将根据用户...

    antlr-repackaged-4.0.jar

    antlr有 v2 v3 v4多个版本并存,中文文档多数是v2的, hive 1.1.0版本在注释中提到了antlr 3.4。ANTLR将上述结合起来,它允许我们定义识别字符流的词法规则和用于解释Token流的语法分析规则。然后,ANTLR将根据用户...

    hive学习和习题集

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。(1)解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST...

    Lab 5.语法分析实验1

    ANTLR是一个广泛应用于工业界的语法分析器生成工具,它能处理结构化文本和二进制文件,被Twitter Search、Hive、Pig、Jython以及GraalVM等项目所采用。ANTLR的核心功能是根据形式化语言的文法描述生成解析器,同时...

    hive源码分析

    Hive是Facebook开发的一款数据仓库工具,用于处理存储在Hadoop文件系统中的大量数据集。它通过提供SQL-like语言HiveQL来简化对这些数据的查询过程。本文将深入剖析Hive 0.7.1版本的内部工作原理及其核心组件。 ####...

    14-Hive查询1

    1. **SQL转AST**:Driver 接收到 SQL 后,通过解析器(Parser)和 Antlr 工具将其转化为抽象语法树。 2. **Semantic Analysis**:AST 进入 Semantic Analyzer,Analyzer 生成 QueryBlock(QB),并进行合法性检查和...

    dt-sql-parser:使用antlr4构建的BigData SQL解析器

    支持SQL: MySQL Flink SQL Spark SQL Hive SQL PL / SQL 提示:该项目是Javascript语言的默认项目,如果需要,您也可以尝试将其编译为其他语言。安装// use npmnpm i dt-sql-parser --save// use yarnyarn add dt-...

Global site tag (gtag.js) - Google Analytics