我正在编写一个将微小的C代码转换为Python代码的转换程序,但我需要构建一个预处理器解决方案来替换#define并管理编译器C指令(#ifdef,#else,#define...)
我选择在Python中使用pcpp模块,但没有成功...是否可以在完整的Tatsu解决方案中使用解决方案?
发布于 2019-10-09 06:29:51
不幸的是,TatSu中支持预处理的部分没有文档。
您可以查看Buffer.include() is implemented如何将原始的行和行信息替换为转换生成的块的行和行信息。
def include(self, lines, index, i, j, name, block, **kwargs):
blines, bindex = self._preprocess_block(name, block, **kwargs)
assert len(blines) == len(bindex)
lines[i:j] = blines
index[i:j] = bindex
assert len(lines) == len(index)
return j + len(blines) - 1基本上,您可以使用自己的Buffer类连接到预处理方法,并以任何方式转换文本。适当的LineIndexInfo列表将允许解析器根据原始源代码行报告错误。
对于带有宏的预处理器,您可能需要一个用于预处理器的解析器,以及一个用于主语言的解析器。诀窍是让第一个解析器为第二个解析器保留行信息。
预处理器可以单独运行,但它必须注入足够的元数据,以允许主解析器恢复原始行信息。
https://stackoverflow.com/questions/56869014
复制相似问题