我正在学习如何使用Antlr4来解析COBOL源代码。目前,我正在遵循这些步骤,正如Enam Biswas在他的Youtube video中所展示的那样。
基本上,我已下载antlr-4.7.1-complete.jar
并将其放入C:\Javalib
。是的,我还在我的Windows环境中包含了路径并创建了antlr.bat
和grun.bat
文件。
对于语法文件,我使用的是Cobol85.g4和Cobol85Preprocessor.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.g4
和Cobol85Preprocessor.g4
之间的差异,也会很好。
答案 0 :(得分:2)
在控制台中,转到新目录并执行以下操作:
wget http://www.antlr.org/download/antlr-4.7.1-complete.jar
(或者只是在控制台上没有wget
的情况下下载它)
wget https://raw.githubusercontent.com/antlr/grammars-v4/master/cobol85/Cobol85.g4
wget https://raw.githubusercontent.com/uwol/cobol85parser/master/src/test/resources/io/proleap/cobol/ast/HelloWorld.cbl
java -jar antlr-4.7.1-complete.jar Cobol85.g4
javac -cp antlr-4.7.1-complete.jar *.java
...并指示解析器以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 REPLACE
,EXEC SQL
等语句。
Cobol85Preprocessor.g4
旨在通过相当广泛的附加逻辑进行扩充,这些逻辑不包含在语法文件中,并且可以对行格式,换行符,注释行,注释条目,EXEC SQL,EXEC CICS等进行规范化。上。
我编写的ProLeap COBOL parser根据文件Cobol.g4和Cobol85Preprocessor.g4在Java中实现所有这些。