生成 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 示例?
关于如何解析 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 示例?