<分区>
我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。
是否有已知的 C 预处理器工具是用 Python 或 JavaScript 实现的?我正在寻找一种方法来可靠地预处理 C(和 C 类)源代码,并希望能够处理条件编译和宏等而不 调用外部 CPP 工具或 native 代码图书馆。另一个潜在的用例是在网络浏览器中的网络应用程序中进行预处理。
到目前为止,我已经在 Java 中找到了实现, Perl ,当然还有 C 和 C 再次。使用 C to JavaScript 之一可能是合理的编译器现已可用。
PLY(Python Lex 和 Yacc)工具包括在 Python 中实现的 cpp .
查看 pypreprocessor
它也可以在 PYPI (Python Package Index) 上找到所以可以直接用pip下载。
如果您希望使用#define 和#ifdef 语句进行简单的条件编译,它应该可以满足您的需求。您可以将其作为独立脚本运行并指定要处理的输入文件(可以是任何语言),也可以将其作为 python 模块导入并使用它来自行使用 python 源。
pypreprocessor 不 支持:
宏替换
逻辑操作(即|| &&)
数学运算(即+-*/)
多行预处理器指令
这是专门为条件编译而非元编程设计的工具。
这是一个如何使用 pypreprocessor 作为独立脚本处理 C 文件的示例:
from pypreprocessor import pypreprocessor
pypreprocessor.defines.append('debug')
pypreprocessor.input = 'input_file.c'
pypreprocessor.output = 'output_file.c'
pypreprocessor.removeMeta = True
pypreprocessor.parse()
实现非常简单。
defines.append('调试'):
与向文件添加“#define debug”指令具有相同的效果。这只是设置定义的一种便捷方式。
pypreprocessor.input = 'input_file.c':
设置要处理的文件。
pypreprocessor.output = 'output_file.c':
设置文件输出到的位置。
pypreprocessor.removeMeta = True:
删除文件中找到的所有预处理器指令。这包括源文件中的所有#define、#ifdef、#undefine、#else 等。这对于创建源代码的“干净”生产版本非常有用,它可以去除所有未使用的条件代码和指令。此步骤也是完全可选的。如果您不添加此项,则任何不符合定义条件的代码都将自动被注释掉。
例如:
#define debug
#ifdef debug
print('this will appear in the postprocessed code')
#else
#print('this will be commented out in the postprocessed code')
#endif
如果您需要宏替换,例如,将源代码从一种语言更改为另一种语言,pyprocessor 尚不支持此功能。理论上,添加不需要太多工作,但需要首先扩展词法分析器以跳过出现在文本字符串中的关键字。
旁注:它还与 python2x 和 python3k 兼容。
免责声明:我是 pypreprocessor 的作者。