使用 NLTK 分析特定变量在 COBOL 程序中的用法



我正在尝试提取影响信息,作为更改特定变量的结果。例如,如果变量 X 发生变化,则 Y 和 Z 是因变量,如下所示:

Move X to Y
Move Y to Z

然后,我将按照它们在 MOVE 语句中出现的顺序打印包含因变量的列表,如X Y Z

我的程序提取所有 MOVE 语句并将其写入文件。逐行读取该文件,逐行搜索变量 X 及其依赖项。我的算法有很多缺点。一个主要缺陷是它无法处理向后引用。 第二件事是,如果变量 X 出现在 ADD 语句中,我需要做一个单独的逻辑。

NLTK可以解决这个问题吗?任何指针或链接开始,都会更方便。到目前为止,我无法访问任何大型机,并且所有程序在Windows中都是.txt格式。

由于更改了特定变量,我正在尝试提取影响信息。

COBOL 在记录布局中使用变量(类似于Cstruct(并允许重叠内存(类似于Cunion(。因此,X可能会对MOVE VAR1 TO VAR2产生影响。

您必须先查看记录结构,然后检查子字段/父字段是否存在,并检查这些引用。

更不用说[COPY] REPLACING了...

可以帮助您了解变量引用位置的东西是交叉引用。您可以在PC上使用COBOL编译器,该编译器允许您编译"大型机COBOL源代码"并生成显示变量定义的符号列表。 (只执行解析而不是实际编译。

唯一可以做到这一点的(GPL(自由编译器是GnuCOBOL。使用cobc -std=ibm-strict -t prog.lst -tsymbols -Xref -fsyntax-only program1.txt编译您的源代码,您将获得如下所示的内容:

SIZE  TYPE           LVL  NAME                           PICTURE
00080 GROUP          01   VAR1
00075 ALPHANUMERIC   02   X                              X(75)
00005 ALPHANUMERIC   02   X2                             X(5)

此符号列表显示:XVAR1的一部分。

NAME                           DEFINED                                    REFERENCES
VAR1                           26       41      153    *160    *206     272     285     322
X                              46      *44      258
X2                             47       164     212     249     269    *286

此交叉引用表明VAR1在第 26 行中定义,并在第 41、153、160、206、272、285、322 行中引用(带星号的条目是写入变量的引用(,类似于X

。按照它们在 MOVE 语句中出现的顺序...

由于COBOL程序经常执行"结构化跳转"(通过PERFORM/EXIT SECTIONEXIT PERFORMEXIT PROGRAMGOBACK(和"非结构化"GO TO因此,只有在您可以跟踪程序的情况下,顺序才是正确的。许多 COBOL 运行时都允许你这样做,但你必须用真实数据来提供它......

出于这些原因,我会回答你的问题

NLTK可以解决这个问题吗?

用"不"。使用 COBOL 编译器更好地预处理源代码,该编译器支持包含符号列表和交叉引用的列表以及与源代码一起使用的方言,然后对生成的表进行简单的解析,这在 Python 中当然是可能的。

最新更新