生成 C 声明

Generating C declarations

关于如何解析 C 声明的主题已经写了很多。

我需要做相反的事情:获取一个类型的树表示,连同变量名,并打印出相应的声明,就像它会出现在 C 源代码中一样。

有没有人以可用的形式写下这样做的算法?

(我试着查看 https://github.com/ridiculousfish/cdecl-blocks 似乎它必须包含这样的东西,但我已经能够在其中找到与它的功能相关的所有代码 除了 生成 C 声明。)

Eli Bendersky 的 Python 库 pycparser 有一个示例,将 C 代码解析为 AST 表示,并漂亮地打印它,再次将其转换为 C 代码。

我想到的具体例子can be found here,我觉得你感兴趣的部分是这样的:

def _zz_test_translate():
    # internal use
    src = r'''
    void f(char * restrict joe){}
    int main(void)
    {
        unsigned int long k = 4;
        int p = - - k;
        return 0;
    }
    '''
    parser = c_parser.CParser()
    ast = parser.parse(src)
    ast.show()
    generator = c_generator.CGenerator()

    print(generator.visit(ast))

那么这个例子的作用是从字符串 (src) 解析 C -> AST。然后它漂亮地打印出 AST (ast.show())。然后它将 AST 转换为 C 源代码并打印出来。

此示例使用 c_generator 模块 which can be found here。 它是一个class,带有一个visit-方法,遍历一个AST并吐出C代码。

我用它来检测 C 代码,例如在函数调用或 return 点的开头插入代码。应该可以通过编程方式定义 struct-decls,然后将它们转换为 C。

根据您的描述,这听起来好像有用?要么直接:来自 AST 格式 -> C 源,要么作为您自己工作的灵感来源。

您能否提供一些您希望转换为 C 代码的 struct-decl 示例?