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

Antlr4 如何编译这个COBOL语法文件?,antlr4,Antlr4,我正在使用以下URL中的COBOL语法文件: https://github.com/antlr/grammars-v4/tree/master/cobol85 从给定的源代码中,有两个语法文件,分别是Cobol85.g4和Cobol85预处理器.g4 如果我像下面这样分开处理,这两种方法都很有魅力: ~$ antlr4 -Dlanguage=Python2 Cobol85 及 然而,我意识到,只有cobol85预处理器能够理解COBOL中的注释。另一方面,Cobol85语法文件没有。我的最佳

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

https://github.com/antlr/grammars-v4/tree/master/cobol85
从给定的源代码中,有两个语法文件,分别是
Cobol85.g4
Cobol85预处理器.g4

如果我像下面这样分开处理,这两种方法都很有魅力:

~$ antlr4 -Dlanguage=Python2 Cobol85

然而,我意识到,只有
cobol85预处理器
能够理解COBOL中的注释。另一方面,
Cobol85
语法文件没有。我的最佳想法是,也许我需要将两者一起导入到一个文件中

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

grammar Cobol;
import Cobol85Preprocessor, Cobol85;
并使用以下命令对其进行编译:

~$ antlr4 -Dlanguage=Python2 Cobol
好消息,我发现编译它没有问题。坏消息是,与前一种方法(单独处理语法文件)相比,它的效果并不理想

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

line 1:30 extraneous input '.\r\n     ' expecting {<EOF>, ADATA, ADV...
行1:30外部输入“”。\r\n'应为{,ADATA,ADV。。。
有什么办法可以解决这个问题吗?或者,我应该把这两个问题分开处理?有人能帮我解决这个问题吗


PS:我不确定这段信息是否有用。我正在与Listener一起使用
Antlr 4.7.1

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

从语法
Cobol85.g4
生成的解析器必须提供COBOL源代码,该源代码已通过COBOL预处理器进行预处理。
Cobol85预处理器。g4
是该预处理器的核心,能够解析语句,如
COPY REPLACE
EXEC SQL

COBOL85预处理器.g4
旨在通过相当广泛的附加逻辑进行扩充,这些逻辑不包括在语法文件中,并支持行格式、换行符、注释行、注释项、EXEC SQL、EXEC CICS等的标准化。缺少这些代码会导致您注意到的问题


由我编写的基于文件和的Java实现了所有这些。但是,目前还没有Python实现。

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

从语法
Cobol85.g4
生成的解析器必须提供COBOL源代码,该源代码已通过COBOL预处理器进行预处理。
Cobol85预处理器。g4
是该预处理器的核心,能够解析语句,如
COPY REPLACE
EXEC SQL

COBOL85预处理器.g4
旨在通过相当广泛的附加逻辑进行扩充,这些逻辑不包括在语法文件中,并支持行格式、换行符、注释行、注释项、EXEC SQL、EXEC CICS等的标准化。缺少这些代码会导致您注意到的问题


由我编写的基于文件和的Java实现了所有这些。但是,目前还没有Python实现。

语法附带了一个Java示例。请检查该语法以了解使用的内容。我假设您需要这两个语法(非组合),一个用于预处理器,一个用于最终代码。该语法附带一个Java示例。检查该语法以了解使用方法。我假设您需要两个语法(非组合),一个用于预处理器,一个用于最终代码。
line 1:30 extraneous input '.\r\n     ' expecting {<EOF>, ADATA, ADV...