如何使用TATSU构建预处理器解决方案



我正在为python代码编写一个针对小c代码的转板器,但是我需要构建一个预处理器解决方案来替换 #define并管理编译器c指令(#ifdef,#else,#else,#define,#define...(

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

不幸的是,tatsu支持预处理的部分是无证的。

您可以查看如何实现Buffer.include(),从转换产生的块替换原始行和行信息。

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的正确列表将使解析器报告错误再次出现原始源线。

对于与宏的预处理程序,您可能需要一个预处理程序的解析器,并且是主要语言的解析器。诀窍将使第一个解析器保留第二个的线路信息。

预处理器可能会分别运行,但必须足够注入元数据以允许主解析器恢复原始行信息。

相关内容

最新更新