ANTLR忽略oracle脚本中的“/”

时间:2014-01-08 07:44:24

标签: java antlr

我在ANTLR中编写一个解析器来解析oracle脚本。我想在脚本中忽略“/”。

  

DROP PACKAGE package_name; /

无论如何都要忽略这个正斜杠?

2 个答案:

答案 0 :(得分:1)

您可以使用如下所示的词法分析器规则来隐藏输入中的所有斜杠字符:

SLASH : '/' -> channel(HIDDEN);

将令牌放在HIDDEN频道上会将令牌隐藏在解析器规则中,但仍会显示在您生成的解析树上调用getText()所产生的文本中。如果您想完全删除该字符(即使是getText()),那么您可以按如下方式更改规则:

SLASH : '/' -> skip;

如果您只想忽略出现在行尾的斜杠字符,可以添加如下谓词:

IGNORED_SLASH
  : '/' {_input.LA(1)=='\r' || _input.LA(1)=='\n' || _input.LA(1)==EOF}?
    -> channel(HIDDEN)
  ;

答案 1 :(得分:0)

github或我的fork上查看Alexander的PL / SQL解析器,您可能会发现PL / SQL解析器的最佳开源实现。

但回到你的问题。您有两个选项可以在谓词中实现很多woodoo(如@ 280Z28所示)或者可以看到here:

或者你实现“岛语法”。因为这确实是一个岛屿语法。 PL / SQL文件应该用三个不同的词法分析器处理(一个用于SQL,第二个用于PL / SQL,第三个用于SQLPLUS语句)。似乎谓词可以解决它,但随着您将拥有越来越多的示例数据,代码将难以实现。 (例如,如果后面跟着白色字符,或者如果它跟着一些白色字符,那么这个斜线也应该被忽略。)