我正在使用以下URL中的COBOL语法文件:
https://github.com/antlr/grammars-v4/tree/master/cobol85在给定的源文件中,有两个语法文件,它们是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。
发布于 2018-05-20 19:02:24
声明:我是这些COBOL ANTLR4语法文件的作者。
语法Cobol85.g4生成的解析器必须提供COBOL源代码,该源代码已经用COBOL预处理程序进行了预处理。Cobol85Preprocessor.g4是该预处理器的核心,它支持对语句(如COPY REPLACE、EXEC SQL等)的解析。
Cobol85Preprocessor.g4是用相当广泛的附加逻辑来增强的,它不包括在语法文件中,它支持行格式、换行、注释行、注释条目、EXEC、EXEC等的规范化。这个缺失的代码会导致你注意到的问题。
我编写的ProLeap COBOL解析器基于Cobol.g4和Cobol85Preprocessor.g4文件在Java中实现了所有这些。然而,目前还没有Python实现。
https://stackoverflow.com/questions/50414888
复制相似问题