无法使用 Antlr4 解析 COBOL 源代码

Can't parse COBOL source code with Antlr4

我正在学习如何使用 Antlr4 来解析 COBOL 源代码。目前,我正在按照 Enam Biswas 在他的 Youtube video.

中演示的步骤进行操作

基本上,我已经下载 antlr-4.7.1-complete.jar 并将其放在 C:\Javalib 中。是的,我还将路径包含在我的 Windows 环境中并创建了 antlr.batgrun.bat 文件。

对于语法文件,我使用 Cobol85.g4 and Cobol85Preprocessor.g4 which were taken from Ulrich Wolffgang github. On the same time, I use HellowWorl.cbl 示例源代码来查看解析的工作原理。

在运行之后antlr.bat,我执行了下面的命令:

C:\Users\ffa\Desktop\COBOL>grun Cobol85Preprocessor startRule HellowWorld.cbl

结果,我收到如下所示的错误信息:

Warning: TestRig moved to org.antlr.v4.gui.TestRig; calling automatically
Can't load Cobol85.g4 as lexer or parser

由于我不确定为什么我不能像视频中那样解析它,我还尝试了以下命令:

C:\Users\ffa\Desktop\COBOL>grun Cobol85 startRule HellowWorld.cbl

C:\Users\ffa\Desktop\COBOL>grun Cobol85* startRule HellowWorld.cbl

结束了,我仍然得到同样的错误信息。因此,我通过 Google 进行了搜索,并找到了下载 antlr-runtime-4.7.1.jar 的建议。所以,我下载了文件并将其放在位于 C:\Javalib.

的同一目录中

当我执行上面的命令时,这次,我收到了不同的消息

Error: Could not find or load main class org.antlr.v4.runtime.misc.TestRig

谁能帮我用Antlr4解析COBOL源代码?如果有人可以解释 Cobol85.g4Cobol85Preprocessor.g4 之间的区别,那也很好。

从您的控制台进入一个新目录并执行以下操作:

1。下载 ANTLR jar:

wget http://www.antlr.org/download/antlr-4.7.1-complete.jar

(如果 wget 在您的主机上不可用,则只下载它)

2。下载 COBOL 语法:

wget https://raw.githubusercontent.com/antlr/grammars-v4/master/cobol85/Cobol85.g4

3。下载 COBOL 源文件:

wget https://raw.githubusercontent.com/uwol/cobol85parser/master/src/test/resources/io/proleap/cobol/ast/HelloWorld.cbl

4。从 COBOL 语法生成所有 .java 词法分析器和解析器 类:

java -jar antlr-4.7.1-complete.jar Cobol85.g4

5。编译所有 .java 个源文件:

javac -cp antlr-4.7.1-complete.jar *.java

6。将 COBOL 源文件提供给生成的 lexer/parser

... 并指示解析器以 startRule 规则开始:

java -cp .;antlr-4.7.1-complete.jar org.antlr.v4.gui.TestRig Cobol85 startRule -gui < HelloWorld.cbl

(*nix 用户,执行 java -cp .:antlr-4.7.1-complete.jar org.antlr.v4.gui.TestRig Cobol85 startRule -gui < HelloWorld.cbl)

如果 < 在 Windows 上不起作用,只需这样做:

java -cp .;antlr-4.7.1-complete.jar org.antlr.v4.gui.TestRig Cobol85 startRule -gui

提示现在将无声。它是为了让你输入一些要解析的源代码而写的。当您完成输入一些 COBOL 代码时,以 CTRL+Z 终止(*nix 用户执行 CTRL+D).

就是这样。

现在有一些错误打印到您的控制台,这意味着 COBOL 解析器 无法正确解析源文件。是否与此有关 首先用 pre-processor 做点什么, 或者无效的输入,我不知道。

免责声明:我是这些 COBOL ANTLR4 语法文件的作者。

从语法 Cobol85.g4 生成的解析器必须提供 COBOL 源代码,该源代码已使用 COBOL 预处理器进行了预处理。 Cobol85Preprocessor.g4 是这个预处理器的核心,可以解析 COPY REPLACEEXEC SQL 等语句

Cobol85Preprocessor.g4 旨在增加相当广泛的附加逻辑,它不包含在语法文件中,并启用行格式、换行符、注释行、注释条目、EXEC SQL, EXEC CICS 等。

ProLeap COBOL parser written by me implements all of this in Java based on the files Cobol.g4 and Cobol85Preprocessor.g4.