c - 生成 C 声明

标签 c syntax declaration

关于如何解析 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 . 它是一个具有 visit 方法的类,该方法遍历 AST 并吐出 C 代码。

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

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

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

关于c - 生成 C 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57210279/

相关文章:

java - 在JAVA中用字符 '{'定义字符串

node.js - 如何为具有构造函数的外部 commonjs 模块编写 TypeScript 声明文件?

fedora - eclipse 中的 Pam 模块

python 3.0 "with"语法错误?

c - 操作系统 X : trouble with dirent struct attribute of scandir() function

syntax - 如何在 C# 上下文中引用包含单引号的 F# 名称?

python - 如何通过 Python 中的 Sagemath 库理解可疑的语法应用

c++ - Typedef 函数与函数指针

c - c函数原型(prototype)不匹配仅仅是一个警告吗

c - 关于检查字符串中的数字