用Java解析数百个pl / sql文件

时间:2013-11-07 09:40:13

标签: java sql parsing file-io plsql

我需要使用包含存储过程,视图和函数的大量pl / sql文件,并将它们全部拆分为单个文件。

示例:

create or replace function practice_function(hello in table.hello%type) return     varchar2 as

hello2 varchar2(6);


begin
if hello is not null then
    hello2 := "hi";
    end if;


return hello2;

end practice_function
/

这只是存储函数的一个示例。该文件可能包含10或20个带有注释和阻止注释的文件等。有人可以就我应该如何处理它以及如何编写解析器给我建议。

目前我正在使用Java逐行读取文件并在每行进入时解析。例如,当我需要忽略具有块注释的代码时,这会导致问题。

任何建议都会很棒

1 个答案:

答案 0 :(得分:1)

编写PL / SQL或几乎任何其他解析器是一项具有挑战性的任务。基本上你需要:

  • 创建词法分析器。这会将您的文本分解为标识符,数字,字符串文字,运算符等标记。
  • 创建解析器。这将构建一个令牌树,AST(抽象语法树)。
  • 创建助行器。这些是树步行者,它们会对你的AST做一些操作。他们甚至可以执行您的PL / SQL脚本,或删除所有评论。

即使从代码中删除评论的任务也可能变得非常具有挑战性。走这棵树并删除注释节点应该没问题。当您想要打印新树时,可能会出现困难,因为自然行走顺序可能与正确的文本顺序不同。

您可以尝试使用existing ANTLR parser。这将完成前两个步骤。

关于如何从ANTLR开始的文章:antlr: is there a simple example?