0

我需要获取数百个包含存储过程、视图和函数的 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 逐行读取文件并在它们进入时解析每一行。例如,当我需要忽略具有块注释的代码时,这会导致问题。

任何建议都会很棒

4

1 回答 1

1

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

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

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

您可以尝试使用现有的 ANTLR 解析器。这将完成前两个步骤。

一篇关于如何从 ANTLR 入手的文章:antlr: 有简单的例子吗?

于 2013-11-07T10:34:29.513 回答