如何编译这个COBOL语法文件?

时间:2018-05-18 15:39:57

标签: antlr4

我正在使用以下网址中的COBOL语法文件:

https://github.com/antlr/grammars-v4/tree/master/cobol85

从给定的来源,有2个语法文件Cobol85.g4Cobol85Preprocessor.g4

如果我像下面那样单独处理,两者都像魅力一样:

~$ antlr4 -Dlanguage=Python2 Cobol85

~$ antlr4 -Dlanguage=Python2 Cobol85Preprocessor

但是,我知道,只有Cobol85Preprocessor能够理解COBOL中的评论。另一方面,Cobol85语法文件没有。我最好的,也许我需要将两者一起导入一个文件。

所以,我创建了另一个名为Cobol.g4的语法文件,其中包含以下代码:

grammar Cobol;
import Cobol85Preprocessor, Cobol85;

并使用以下命令对其进行编译:

~$ antlr4 -Dlanguage=Python2 Cobol

好消息,我发现编译没有问题。坏消息,与之前的方法相比,它不能完美地工作(单独处理语法文件)。

相反,我收到了以下错误消息:

line 1:30 extraneous input '.\r\n     ' expecting {<EOF>, ADATA, ADV...

有没有办法解决这个或设计问题,我应该单独处理?有谁可以帮我解决这个问题?

PS:我不确定这条信息是否有用。我在监听器中使用Antlr 4.7.1

1 个答案:

答案 0 :(得分:2)

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

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

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

我编写的ProLeap COBOL parser基于文件Cobol.g4Cobol85Preprocessor.g4在Java中实现了所有这些功能。但是,还没有Python实现。