我正在使用以下网址中的COBOL语法文件:
https://github.com/antlr/grammars-v4/tree/master/cobol85
从给定的来源,有2个语法文件Cobol85.g4
和Cobol85Preprocessor.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
。
答案 0 :(得分:2)
免责声明:我是这些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中实现了所有这些功能。但是,还没有Python实现。