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

ANTLR的一些错误解决方案

    博客分类:
  • hive
阅读更多
antlr书写和编译的典型错误:

错误1:
2013-04-27 16:34:53,116 ERROR ql.Driver (SessionState.java:printError(401)) - FAILED: RewriteEmptyStreamException token valueList
org.antlr.runtime.tree.RewriteEmptyStreamException: token valueList
        at org.antlr.runtime.tree.RewriteRuleElementStream._next(RewriteRuleElementStream.java:158)
        at org.antlr.runtime.tree.RewriteRuleTokenStream.next(RewriteRuleTokenStream.java:57)
        at org.apache.hadoop.hive.ql.parse.HiveParser.partitionValuesExper(HiveParser.java:17876)
        at org.apache.hadoop.hive.ql.parse.HiveParser.partitionExper(HiveParser.java:17569)
        at org.apache.hadoop.hive.ql.parse.HiveParser.partitionTemplate(HiveParser.java:17306)
        at org.apache.hadoop.hive.ql.parse.HiveParser.tablePartition(HiveParser.java:16794)
        at org.apache.hadoop.hive.ql.parse.HiveParser.createTableStatement(HiveParser.java:3783)
        at org.apache.hadoop.hive.ql.parse.HiveParser.ddlStatement(HiveParser.java:1836)
        at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:959)
        at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:644)
        at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:439)
        at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:416)
        at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:335)
        at org.apache.hadoop.hive.ql.Driver.run(Driver.java:893)
        at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:259)
        at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:216)
        at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:412)
        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:755)
        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:613)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:156)


解决方法:
本问题产生原因是赋值定义不对,产生错误的代码定义:
partitionValuesExper
@init { msgs.push(" partitionValuesExper specification"); }
@after { msgs.pop(); }
    :KW_VALUES  KW_LESS KW_THEN LPAREN value=stringOrNumOrFunc RPAREN 
    -> ^(TOK_VALUES_LESS  $value )
    |KW_VALUES  KW_GREATER KW_THEN LPAREN value=stringOrNumOrFunc RPAREN 
     -> ^(TOK_VALUES_GREATER  $value )
    | KW_VALUES LPAREN valueList=(stringOrNumOrFuncList)
 RPAREN
     -> ^(TOK_VALUES   $valueList )


错误出现在
KW_VALUES LPAREN valueList=(stringOrNumOrFuncList) RPAREN
去掉括号,改为:
valueList=stringOrNumOrFuncList

错误2:
”reference to rewrite element tableSubPartition without reference on left of ->“
通常这个错误的伴随Decision can match input such as "..." using multiple alternatives错误出现

解决方法:
错误的原因是不服和LL文法定义,特别是歧义的片段定义副本有如identity等变量定义,让状态机产生歧义,解决方法是将相同的部分提取出来,分层定义即可。



分享到:
评论

相关推荐

    antlr中文济南

    ANTLR 是一个强大的、广泛使用的解析器生成器,用于构建语法...通过深入理解和使用ANTLR,开发者可以创建高效、可扩展的语言解析解决方案。在学习ANTLR的过程中,配合阅读原文和实践示例将有助于更好地掌握这一技术。

    antlr v2.7.5

    ANTLR( Anatomy of a Language Parser )是一个强大的解析...虽然这个版本相对较旧,但在某些场景下,它仍然能够提供高效且可靠的解决方案。如果你需要处理特定的结构化文本或二进制数据,ANTLR是一个值得考虑的工具。

    antlr4-json-parser.zip

    总的来说,"antlr4-json-parser.zip"提供了一个使用ANTLR4工具构建的JSON解析器,它结合了ANTLR4的强大解析能力与Java语言的灵活性,参考了Jackson库的优秀实践,为JSON数据处理提供了一种高效、可扩展的解决方案。...

    基于ANTLR的信号表达式解析

    本文提出的解决方案是通过ANTLR实现了信号表达式的动态解析,即用户只需输入表达式,计算机即可识别并计算表达式的值,极大地提高了信号处理的灵活性和便捷性。ANTLR的核心工作原理包括两个主要步骤:首先是词法分析...

    antlr_2.7.6.jar.zip

    通过理解和使用ANTLR 2.7.6,开发者能够创建自定义的解析解决方案,提高开发效率,同时也能深入理解编译器设计和解析技术的基础知识。尽管现在有更新的版本可供选择,但是ANTLR 2.7.6作为历史版本,仍然具有一定的...

    开源项目-antlr-antlr4.zip

    这使得ANTLR成为跨平台和跨语言的解析解决方案。 4. **语法可视化**:ANTLRWorks是ANTLR 4的集成开发环境,它提供了一个图形化的语法图界面,允许开发者直观地查看和调试语法规则。 5. **语义预测**:ANTLR 4允许...

    The definitive ANTLR 4 reference

    ANTLR 4 是该系列的最新版本,提供了更高效、灵活的语言解析解决方案。 #### 二、ANTLR 4 的核心功能 1. **语法分析**:ANTLR 4 支持构建复杂的语法分析器,能够识别各种形式的语言结构。 2. **词法分析**:通过...

    antlr 相关资料 3.0的

    ANTLR(ANTLR Not Another Parser Generator)是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。...通过掌握ANTLR 3.0的核心概念和技术,你可以构建出高效、可维护的解析解决方案。

    An Introduction To ANTLR

    - 虽然ANTLR可以生成词法分析器、语法分析器和树遍历器,但它并不是一个完整的编译器解决方案。用户仍然需要自己实现编译器中的其他组件,如符号表管理、错误处理等。 - 在某些复杂场景下,手动优化可能仍然是必要...

    AST.getLine()I 解决方案

    5. **调整类加载顺序**:在一些复杂的应用中,可能需要调整类加载策略,确保正确的ANTLR版本被加载。 关于`hibernate3.3.1min`这个文件,它似乎是一个Hibernate 3.3.1版本的精简版。Hibernate是一个流行的关系对象...

    the Definitive ANTLR Reference 源代码 包含所有例子

    5. **目标语言独立**:ANTLR生成的解析器和词法分析器可以针对多种编程语言,这使得ANTLR成为一个跨平台的解决方案。 6. **丰富的社区支持**:ANTLR拥有活跃的社区,提供了大量的教程、示例和插件,便于用户学习和...

    ANTLR3_handouts.pdf(En)

    此外,ANTLR提供了无限远瞻能力,这在选择规则替代方案时非常有用。 #### LL(*)解析器 ANTLR支持LL(*)解析器,这是一种自顶向下的解析方式,其特点是从左到右进行解析,并构建输入的最左推导。LL(*)解析器的一个...

    HDL_ANTLR4:使用 ANTLR4 库分析 VHDL 和 Verilog 代码的 C# 项目

    高密度脂蛋白单反 它是一套用于 VHDL/Verilog 解析、动态编译和仿真的工具。 今天,存储库包含以下...打开解决方案,然后构建(它会得到很多错误),然后关闭它并再次打开,然后构建 MSBuild 命令行 - 运行build.cmd

    antlr4ts:针对ANTLR 4的优化TypeScript目标

    antlr4ts-ANTLR 4的TypeScript / JavaScript目标总览发布:请参阅页面以获取发布说明和发行版链接反馈:使用解决问题(错误,增强功能,功能和问题)要求该项目对开发人员和最终用户有单独的要求。 :light_bulb: 此...

    基于ANTLR的试卷识别和导入系统的研究

    为了解决在线考试系统中手工录入试题效率低下的问题,提出了一种基于ANTLR的自动化解决方案。该方案建立一个试卷识别器,把试卷内容作为源代码,通过词法、语法和语义分析来进行验证和识别,生成试卷模型,实现试题...

    weblogic10 与hibernate冲突解决方案 linux windows环境全解

    weblogic10 与hibernate冲突解决方案 错误如下:org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken linux windows 环境解决方案全解 Linux 启动脚本添加如下: export USER_...

    smt-antlr4-javascript-parser:该项目在构建时将生成 ANTLR4 JavaScript 解析类

    总之,“smt-antlr4-javascript-parser”项目利用ANTLR4的强大功能,为JavaScript提供了一种高效的解析解决方案,对于需要处理JavaScript语法的开发者来说,这是一个宝贵的资源。通过深入理解ANTLR4的工作原理和这个...

    Yan-LR:uses使用ANTLR的非常基本的YAML解析器

    总的来说,Yan-LR项目展示了如何结合ANTLR的强大功能来解析和处理YAML数据,为C++开发者提供了一种灵活且高效的解决方案。通过深入理解ANTLR的工作原理和YAML的语法规则,可以进一步定制和扩展这个解析器,以满足...

    antlride开发工具

    8. **社区支持**:ANTLRide背后有活跃的开发者社区,不断更新和完善,遇到问题时,开发者可以在社区中寻求帮助,分享经验和解决方案。 为了使用ANTLRide,首先需要安装Eclipse IDE,然后通过Eclipse的软件更新功能...

    oe-proparse:基于ANTLR的OpenEdge ABL解析器

    总之,oe-proparse是一个强大且灵活的工具,对于需要处理OpenEdge ABL代码的开发者来说,它提供了高效且可靠的解析解决方案。通过不断改进和扩展,oe-proparse将继续为OpenEdge ABL社区提供宝贵的解析支持。

Global site tag (gtag.js) - Google Analytics