**已关闭。**此问题不符合Stack Overflow guidelines。当前不接受答案。
我们不允许问题寻求书籍、工具、软件库等的建议。您可以编辑问题,以便使用事实和引文来回答。
六年前就关门了。
Improve this question
是否有一个已知的C预处理器工具的实现是在Python或JavaScript中实现的?我正在寻找一种方法来健壮地预处理C(和类似C的)源代码,并希望能够处理,例如,条件编译和宏 * 而不 * 调用外部CPP工具或本机代码库。另一个潜在的用例是在Web应用程序中,在Web浏览器中进行预处理。
到目前为止,我已经在Java、Perl中找到了实现,当然,还有C和C。
PLY(Python Lex和Yacc)工具包括一个在Python中实现的cpp。
5条答案
按热度按时间cbeh67ev1#
checkout pypreprocessor
它也可以在PYPI (Python Package Index)上找到,因此可以使用pip直接下载。
如果你想使用#define和#ifdef语句来进行简单的条件编译,它应该能满足你的需要。你可以将它作为一个独立的脚本运行,并指定一个输入文件(可以是任何语言)来处理,或者你可以将它作为一个python模块导入,并使用它来自消费python源代码。
pypreprocessor不支持:
它是一个专门为条件编译而设计的工具,而不是元编程。
下面是一个如何使用pypreprocessor作为独立脚本处理C文件的示例:
实现非常简单。
定义。append('debug'):
与在文件中添加“#define debug”指令具有相同的效果。这只是一种设置定义的方便方法。
pypreprocessor.输入=“输入文件. c”:
设置要处理的文件。
pypreprocessor.output =“输出文件. c”:
设置文件输出到的位置。
pypreprocessor.removeMeta =真:
删除文件中找到的所有预处理程序指令。这包括所有#define、#ifdef、#undefine、#else等等。这对于创建一个“干净”的生产版本的源代码很有用,去掉了所有未使用的条件代码和指令。这一步也是完全可选的。如果不添加任何不t将被自动注解掉。
例如:
如果你需要宏替换,比如,把源代码从一种语言转换到另一种语言,pyprocessor还不支持这个。理论上,添加宏并不需要太多的工作,但是首先需要扩展词法分析器来跳过出现在文本字符串中的关键字。
qxsslcnc2#
看看PLY,它是Lex和Yacc在Python上的实现,包含一个使用PLY词法分析器的cpp tool implemented in python。还有pycparser,它是一个构建在PLY之上的C语言解析器。
brjng4g33#
Firefox构建系统也会对chrome进行类似的处理,一个名为www.example.com的源文件jar.mn列出了所有需要的XUL/JS文件,这些文件在发布之前会进行预处理,因此ships脚本也会调用一个迷你的preprocessor。
jbose2ul4#
您也许能够围绕clang c预处理器创建一个python绑定。
x3naxklr5#
如果ANTLR可以与Python/Javascript一起使用(我非常怀疑后者),您可以从ANTLR站点获得语法:http://www.antlr.org/grammar/1166665121622/Cpp.tar
如果没有,这可能是一个很好的开始-简单地将它转换为您最喜欢的解析器生成器所理解的语法。