【问题标题】:Antlr PLSQL grammar not parsing package name correctly?Antlr PLSQL 语法无法正确解析包名?
【发布时间】:2016-06-15 06:27:39
【问题描述】:

Here 是 PLSQL 的 Antlr 语法文件。

但是,它并不完全正确。例如,我有一个以以下开头的包:

CREATE OR REPLACE PACKAGE BODY SCHEMA_NAME.PACKAGE_NAME AS

上述语法文件生成的解析器不会将SCHEMA_NAME.PACKAGE_NAME解析为package_namepackage_name是Antlr解析器规则)。

为了解决这个问题,我改变了这个

package_name
    : id
    ;

到这里

package_name
    : id ('.' id)?
    ;

我也试过

package_name
    : id ('.' id_expression)?
    ;

但他们都没有工作。 Antlr 仍然不会在 package name 中包含最后一个 .PACKAGE_NAME 部分。

为什么这不起作用?我该如何解决这个问题?

【问题讨论】:

  • 如果其余规则有任何指示,您实际上需要: id ('.' id_expression)?(尽管这不会改变在这种情况下识别的内容)。
  • @JeroenMostert 我也试过了。那也没用。
  • 我想说,它不起作用,因为它是 Antlr3 语法的一个端口。它还没有完成。这种语法的另一个问题是,它试图同时解析 PL/SQL、SQL 和 DDL 语言。但是这些语法应该在下面使用不同的 Lexer。

标签: parsing antlr


【解决方案1】:

这样的包定义:

package_name
    : id ('.' id_expression)?
    ;

与下一个 PL/SQL 查询配合良好:

CREATE OR REPLACE PACKAGE BODY SCHEMA_NAME.PACKAGE_NAME AS END;

我想你忘记了END 和末尾的分号。

另外,如果您发现错误,请将问题或拉取请求添加到官方 ANTLR 语法存储库,因为此 PL/SQL 语法尚未完成,因为它已在评论中提到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 2011-01-30
    • 1970-01-01
    • 2016-07-21
    相关资源
    最近更新 更多