grr*_*sel 13 javascript c python preprocessor
是否已知使用Python或JavaScript实现的C预处理器工具?我正在寻找一种方法来强大地预处理C(和C之类)源代码,并希望能够处理,例如,条件编译和宏,而无需调用外部CPP工具或本机代码库.另一个潜在的用例是在Web浏览器中的Web应用程序内进行预处理.
到目前为止,我已经发现了Java,Perl,当然还有C和C的实现.使用现在可用的C到JavaScript编译器之一可能是合理的.
PLY(Python Lex和Yacc)工具包括用Python实现的cpp.
它也可以在PYPI(Python包索引)上找到,因此可以使用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()
Run Code Online (Sandbox Code Playgroud)
实现非常简单.
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
Run Code Online (Sandbox Code Playgroud)
例如,如果您需要宏替换,则将源从一种语言更改为另一种语言处理器尚不支持此功能.理论上,添加不需要太多工作,但是需要首先扩展词法分析器以跳过出现在文本字符串中的关键字.
SideNote:它还兼容python2x和python3k.
免责声明:我是pypreprocessor的作者.
查看PLY,一个关于Python的Lex和Yacc的实现,它包含一个使用PLY词法分析器在python中实现的cpp工具.还有pycparser,一个构建在PLY之上的C语言解析器.
归档时间: |
|
查看次数: |
7024 次 |
最近记录: |