首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Tatsu构建预处理器解决方案?

如何使用Tatsu构建预处理器解决方案?
EN

Stack Overflow用户
提问于 2019-07-03 19:22:32
回答 1查看 72关注 0票数 0

我正在编写一个将微小的C代码转换为Python代码的转换程序,但我需要构建一个预处理器解决方案来替换#define并管理编译器C指令(#ifdef,#else,#define...)

我选择在Python中使用pcpp模块,但没有成功...是否可以在完整的Tatsu解决方案中使用解决方案?

EN

回答 1

Stack Overflow用户

发布于 2019-10-09 06:29:51

不幸的是,TatSu中支持预处理的部分没有文档。

您可以查看Buffer.include() is implemented如何将原始的行和行信息替换为转换生成的块的行和行信息。

代码语言:javascript
复制
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列表将允许解析器根据原始源代码行报告错误。

对于带有宏的预处理器,您可能需要一个用于预处理器的解析器,以及一个用于主语言的解析器。诀窍是让第一个解析器为第二个解析器保留行信息。

预处理器可以单独运行,但它必须注入足够的元数据,以允许主解析器恢复原始行信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56869014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档