gpt4 book ai didi

java - 在java中获取COBOL程序的静态函数调用图

转载 作者:行者123 更新时间:2023-12-02 11:30:04 24 4
gpt4 key购买 nike

我必须解析 COBOL 代码,以便生成简单易懂的程序概述。我想使用 Java,因为它的效率/安全性有所妥协。我不了解周围的所有工具,但我知道拥有适合此任务的工具将使事情变得容易得多!

所以我需要一个工具来生成函数调用图,对我来说这基本上意味着编写一个解析器......我认为JavaCC是一个不错的选择,还有ANTLR...这些工具可以创建函数调用图结构吗?

为了绘制函数调用图,使用词法分析器的好方法是什么?我的意思是,我不想重写这些工具中已经实现但我不知道的代码。

谢谢

最佳答案

免责声明:我是 ProLeap COBOL 解析器的维护者。

您可以使用基于 Java 的 ProLeap COBOL parser提取对 paragraphs 的调用, sections , data description entries解析器将为您提供调用图,但是必须添加图形绘制。

所以,例如这一段调用...

 IDENTIFICATION DIVISION.
PROGRAM-ID. SECTIONCLL.
DATA DIVISION.
PROCEDURE DIVISION.
INIT.
PERFORM INIT.

...可以使用以下 Java 代码进行分析,在本例中返回 1 个调用:

package io.proleap.cobol.asg.call;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import java.io.File;

import org.junit.Test;

import io.proleap.cobol.CobolTestBase;
import io.proleap.cobol.asg.metamodel.CompilationUnit;
import io.proleap.cobol.asg.metamodel.Program;
import io.proleap.cobol.asg.metamodel.ProgramUnit;
import io.proleap.cobol.asg.metamodel.procedure.Paragraph;
import io.proleap.cobol.asg.metamodel.procedure.ProcedureDivision;
import io.proleap.cobol.asg.runner.impl.CobolParserRunnerImpl;
import io.proleap.cobol.preprocessor.CobolPreprocessor.CobolSourceFormatEnum;

public class ParagraphCallTest extends CobolTestBase {

@Test
public void test() throws Exception {
final File inputFile = new File("src/test/resources/io/proleap/cobol/asg/call/ParagraphCall.cbl");
final Program program = new CobolParserRunnerImpl().analyzeFile(inputFile, CobolSourceFormatEnum.TANDEM);

final CompilationUnit compilationUnit = program.getCompilationUnit("ParagraphCall");
final ProgramUnit programUnit = compilationUnit.getProgramUnit();
final ProcedureDivision procedureDivision = programUnit.getProcedureDivision();

final Paragraph paragraph = procedureDivision.getParagraph("Init");
assertNotNull(paragraph);
assertEquals(1, paragraph.getCalls().size());
}
}

ProLeap COBOL 解析器根据开源许可证获得许可,因此可以免费使用。

关于java - 在java中获取COBOL程序的静态函数调用图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49353699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com