【发布时间】:2016-06-15 06:27:39
【问题描述】:
Here 是 PLSQL 的 Antlr 语法文件。
但是,它并不完全正确。例如,我有一个以以下开头的包:
CREATE OR REPLACE PACKAGE BODY SCHEMA_NAME.PACKAGE_NAME AS
上述语法文件生成的解析器不会将SCHEMA_NAME.PACKAGE_NAME解析为package_name(package_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。