无法使用Antlr4

时间:2018-03-03 18:57:56

标签: antlr4 cobol grun

我正在学习如何使用Antlr4来解析COBOL源代码。目前,我正在遵循这些步骤,正如Enam Biswas在他的Youtube video中所展示的那样。

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

对于语法文件,我使用的是Cobol85.g4Cobol85Preprocessor.g4,这些文件取自Ulrich Wolffgang github。同时,我使用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之间的差异,也会很好。

2 个答案:

答案 0 :(得分:2)

在控制台中,转到新目录并执行以下操作:

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源文件提供给生成的词法分析器/解析器

...并指示解析器以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做一些事, 或者输入无效,我不知道。

答案 1 :(得分:0)

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

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

Cobol85Preprocessor.g4旨在通过相当广泛的附加逻辑进行扩充,这些逻辑不包含在语法文件中,并且可以对行格式,换行符,注释行,注释条目,EXEC SQL,EXEC CICS等进行规范化。上。

我编写的ProLeap COBOL parser根据文件Cobol.g4Cobol85Preprocessor.g4在Java中实现所有这些。