ANTRL编译HiveLexer.g文件报错syntax error: antlr: NoViableAltException(@[])

简介: ANTRL编译HiveLexer.g文件报错syntax error: antlr: NoViableAltException(@[])

项目场景:


编程获得数据血缘关系的需求对数据仓库来说并不普遍,只有数据规模达到很大的程度,或者存在复杂数据生产关系的报表数量增加到很大的程度,单独的数据血缘关系工作才有必要。

在规模没达到之前,人工的识别和管理是更经济有效的。


antlr是指可以根据输入自动生成语法树并可视化的显示出来的开源语法分析器。ANTLR—Another Tool for Language Recognition,其前身是PCCTS,它为包括Java,C++,C#在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器(recognizer),编译器(parser)和解释器(translator)的框架。 antlr有 v2 v3 v4多个版本并存,中文文档多数是v2的, hive 1.1.0版本在注释中提到了antlr 3.4。ANTLR将上述结合起来,它允许我们定义识别字符流的词法规则和用于解释Token流的语法分析规则。然后,ANTLR将根据用户提供的语法文件自动生成相应的词法/语法分析器。用户可以利用他们将输入的文本进行编译,并转换成其他形式(如AST—Abstract Syntax Tree,抽象的语法树)。


使用ANTLR3.5.2版本解析Hivesql的源代码grammar文件中的HiveLexer.g,将代码:

@lexer::header {
package org.apache.hadoop.hive.ql.parse
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.hive.conf.HiveConf
}
@lexer::members {
  private Configuration hiveConf
  public void setHiveConf(Configuration hiveConf) {
    this.hiveConf = hiveConf
  }
  protected boolean allowQuotedId() {
    if(hiveConf == null){
      return false
    }
    String supportedQIds = HiveConf.getVar(hiveConf, HiveConf.ConfVars.HIVE_QUOTEDID_SUPPORT)
    return !"none".equals(supportedQIds)
  }
}


这段需要注释,以便借用ANTLR编译过后的JAVA不带有该包。


问题描述


将这一段使用/** */注释掉之后,还是编译,发现报错:

[10:58:10] error(100): HiveLexer.g:42:1: syntax error: antlr: NoViableAltException(9@[])
[10:58:10] error(100): HiveLexer.g:42:2: syntax error: antlr: NoViableAltException(49@[])
[10:58:10] error(100): HiveLexer.g:42:7: syntax error: antlr: MissingTokenException(inserted [@-1,0:0='<missing ACTION>',<4>,42:6] at :)
[10:58:10] error(100): HiveLexer.g:42:8: syntax error: antlr: NoViableAltException(22@[])
[10:58:10] error(100): HiveLexer.g:42:9: syntax error: antlr: NoViableAltException(80@[])
[10:58:10] error(100): HiveLexer.g:42:9: syntax error: antlr: NoViableAltException(80@[])
[10:58:10] error(100): HiveLexer.g:47:1: syntax error: antlr: MissingTokenException(inserted [@-1,0:0='<missing SEMI>',<82>,47:0] at KW_TRUE)

原因分析:


查询资料发现


注释中’;'作为终止符,产生错误

 

b0b778330e3c45afa1be55211818c36f.png


踩坑指南:大叔经验分享(78)hive查询报错NoViableAltException - 匠人先生 - 博客园


hive split 分隔分号问题_小亚文的博客-CSDN博客_\073 分隔符


hive 报错NoViableAltException_丶大白菜的博客-CSDN博客_noviablealtexception


解决方案:


把原注释文档全删除或者将其中的;给删掉。

问题解决。

目录
相关文章
|
4月前
|
IDE 开发工具 Python
python中SyntaxError: unexpected EOF while parsing(语法错误:解析时遇到意外的文件结束)
【5月更文挑战第14天】python中SyntaxError: unexpected EOF while parsing(语法错误:解析时遇到意外的文件结束)
89 6
|
编译器 Go 开发工具
常见问题之Golang——cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%错误
本文主要是对我日常在使用golang时遇到的一些问题与解决方式进行的汇总,在此提供给大家便于排查一些遇到的问题,其中有更好的解决方案可在评论区留言。
1093 0
常见问题之Golang——cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%错误
|
4月前
|
IDE 搜索推荐 开发工具
|
4月前
|
测试技术 iOS开发 Perl
废弃第三方库导致的library not found for -lXXXXX(linker command failed ) 完美解决方法
废弃第三方库导致的library not found for -lXXXXX(linker command failed ) 完美解决方法
38 0
编译Ffmpeg错误:strsafe.h:1859:11: error: ‘WEOF‘ undeclared
编译Ffmpeg错误:strsafe.h:1859:11: error: ‘WEOF‘ undeclared
99 0
编译pluma: pluma/Makefile.am:192: error: HAVE_INTROSPECTION does not appear in AM_CONDITIONAL
编译pluma: pluma/Makefile.am:192: error: HAVE_INTROSPECTION does not appear in AM_CONDITIONAL
108 0
|
Linux
编译telepresence:fatal error: libavfilter/avfiltergraph.h: 没有那个文件或目录
编译telepresence:fatal error: libavfilter/avfiltergraph.h: 没有那个文件或目录
72 0
编译OpenJDK12:test_json.cpp error C2143 语法错误
编译OpenJDK12:test_json.cpp error C2143 语法错误
73 0
|
数据可视化 编译器 Windows
CMake“cmake is not able to compile a simple test program”错误 的解决方法
CMake“cmake is not able to compile a simple test program”错误 的解决方法
728 0
关于 编译软件时报错“xdo.c:29:34: fatal error: X11/extensions/XTest.h:”错误 的解决方法
关于 编译软件时报错“xdo.c:29:34: fatal error: X11/extensions/XTest.h:”错误 的解决方法
关于 编译软件时报错“xdo.c:29:34: fatal error: X11/extensions/XTest.h:”错误 的解决方法