Antlr4 创建一个C和C++;使用ANTLR的预处理器 < >我想创建一个工具,它可以分析配置文件中的C和C++代码,并检测不必要的行为。我考虑使用ANTLR来完成这项任务,因为几年前我已经用它从头创建了一个简单的编译器(变量、条件、循环和函数)

Antlr4 创建一个C和C++;使用ANTLR的预处理器 < >我想创建一个工具,它可以分析配置文件中的C和C++代码,并检测不必要的行为。我考虑使用ANTLR来完成这项任务,因为几年前我已经用它从头创建了一个简单的编译器(变量、条件、循环和函数),antlr4,preprocessor,Antlr4,Preprocessor,我从ANTLR语法库中获取了C.g4和CPP14.g4。但是,我注意到它们不支持预处理解析,因为这是编译中的另一个步骤 我试图找到一种语法来完成预处理部分(更新为ANTLR4),但运气不佳。此外,我还明白,如果我进行两步解析,我将无法保留每个字符的原始位置,因为我已经修改了输入流 我想知道是否有一个好的ANTLR语法或程序(最好是Python,但也可以处理其他语言)可以帮助我预处理C代码。我还考虑过使用gcc-E,但是我无法检查宏定义(例如,我想警告用户是否使用了#pragma gcc(我为其编

我从ANTLR语法库中获取了C.g4和CPP14.g4。但是,我注意到它们不支持预处理解析,因为这是编译中的另一个步骤

我试图找到一种语法来完成预处理部分(更新为ANTLR4),但运气不佳。此外,我还明白,如果我进行两步解析,我将无法保留每个字符的原始位置,因为我已经修改了输入流

我想知道是否有一个好的ANTLR语法或程序(最好是Python,但也可以处理其他语言)可以帮助我预处理C代码。我还考虑过使用
gcc-E
,但是我无法检查宏定义(例如,我想警告用户是否使用了
#pragma gcc
(我为其编写此程序的大学的一些学生使用它来绕过一些课程编码风格限制)。此外,
gcc-E
将包括我不想处理的库头内容

我的问题是,如果你能推荐一个我可以用来预处理C和C++代码的语法/程序。或者,如果你能指导我如何创建一个语法,那就很完美了。我可以写基本的<代码>定义< <代码> >代码>语法> /代码>等处理,但是我不能处理条件和MACR。o函数,因为我不确定如何处理它们


提前感谢!

这个问题要求外部资源,几乎与主题无关。但是,它也有一部分值得注意


术语“预处理器”已经表明了宏等的处理是关于什么的。解析器从未看到输入的禁用部分,这也意味着它可以是任何东西,可能不是要解析的实际语言的一部分。因此,解析类C语言的一个好方法是通过预处理器发送输入(可以是专门的输入流)删除所有预处理构造、解析宏和删除禁用的文本。解析位置不是问题,因为您可以在打开新输入流之前推送当前标记位置,并在使用完后还原该位置。将报告的错误与输入流堆栈一起存储。这样,您可以保留正确的标记我在Parr的《AtLR4》中写了一些关于这个的文章,我想,我在不久前用一个带有ANTLR CPP14语法的C++解析器实现了它,但是它只涉及了γ包含的,而不是更难的宏,条件句等等。谢谢你的回答!看到了你的项目。这是一个很大的帮助,但不幸的是,由于它基于ANTLr 2,转换看起来相当困难。我正在进行我的实现,如果你感兴趣,我将分享我的进展:)顺便说一句,在所有与ANTLr相关的事情上都做得很好,比如VS代码插件!!