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

时间:2017-08-13 18:32:31

标签: python nltk cobol text-analysis

我试图通过更改特定变量来提取影响信息。例如,如果变量X中有变化,那么如果Y和Z是如下所述的因变量:

Move X to Y
Move Y to Z

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

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

这可以通过NLTK解决吗?任何指针或链接开始都会更方便。截至目前,我无权访问任何大型机,所有程序在Windows中都是.txt格式。

1 个答案:

答案 0 :(得分:3)

  

我试图通过更改特定变量来提取影响信息。

COBOL在记录布局中使用变量(类似到C export const Header = styled.img.attrs({ src: props => props.theme.images.Header1x, srcSet: props => `${props.theme.images.Header1x} 1x, ${props.theme.images.Header2x} 2x, ${props.theme.images.Header3x} 3x`, })` height: 42px `; )并允许重叠内存(类似到C struct) 。因此,union可能会对X产生影响。

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

甚至不谈MOVE VAR1 TO VAR2 ...

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

执行此操作的唯一(GPL)免费编译器是GnuCOBOL。使用[COPY] REPLACING编译您的来源,您将获得以下内容:

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) X的一部分。

VAR1

此交叉引用显示NAME DEFINED REFERENCES VAR1 26 41 153 *160 *206 272 285 322 X 46 *44 258 X2 47 164 212 249 269 *286 在第26行中定义,并在第41,153,160,206,272,285,322行中引用(带星号的条目是写入变量的引用) ,类似于VAR1

  

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

作为一个COBOL程序经常做"结构化跳跃" (通过X / PERFORMEXIT SECTIONEXIT PERFORMEXIT PROGRAM)和"非结构化" GOBACK只有在您可以追踪程序时,订单才会正确。许多COBOL运行时允许您执行此操作,但您必须使用实际数据提供它...)。

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

  

这可以通过NLTK解决吗?

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