2

我正在学习如何使用 Antlr4 来解析 COBOL 源代码。目前,我正在按照 Enam Biswas 在他的 Youtube视频中所展示的步骤进行操作。

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

对于语法文件,我使用的是取自 Ulrich Wolffgang github的Cobol85.g4Cobol85Preprocessor.g4。同时,我使用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

最后,我仍然收到相同的错误消息。所以,我通过谷歌搜索并找到了下载的建议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.g4很好Cobol85Preprocessor.g4

4

2 回答 2

3

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

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 解析器无法正确解析源文件。我不知道这是否与首先使用预处理器做某事有关,或者与输入无效有关。

于 2018-03-03T19:30:15.197 回答
2

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

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

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

我编写的ProLeap COBOL 解析器基于文件Cobol.g4Cobol85Preprocessor.g4在 Java 中实现了所有这些。

于 2018-05-21T08:10:03.570 回答