关于如何解析 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/