javascript - 在 Python 或 JavaScript 中实现 C 预处理器?

标签 javascript python c preprocessor

<分区>

是否有已知的 C 预处理器工具是用 Python 或 JavaScript 实现的?我正在寻找一种方法来可靠地预处理 C(和 C 类)源代码,并希望能够处理条件编译和宏等而不调用外部 CPP 工具或 native 代码图书馆。另一个潜在的用例是在网络浏览器中的网络应用程序中进行预处理。

到目前为止,我已经在 Java 中找到了实现, Perl ,当然还有 CC再次。使用 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 的作者。

关于javascript - 在 Python 或 JavaScript 中实现 C 预处理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4350764/

相关文章:

javascript - 如何向 Chrome 扩展程序发送数据?

python - Redis 中的原子操作

python - 在 GLUE 任务上微调 BERT 时,如何监控训练和评估损失?

javascript - 在所有四个方向上移动一个 div

javascript - 删除所有 power == 0 的数组

c - 如何使用c套接字程序将捕获的数据包保存在LibreOffice Calc中而不是txt文件中?

c - 如何在 C 中从 COPYDATASTRUCT 复制消息?

c - 使用 GCC 在 C 中未定义对 SIGN 的引用

javascript - 如何在javascript中暂停UI线程

javascript - 为什么此代码可以在单独的文件上运行但不能内联