关于如何解析C声明的话题已经有很多文章了。
我需要做相反的事情:接收一个类型的树形表示,加上变量名称,并将其打印为对应的C源代码声明。
是否有人写下了这样的算法,并提供可用的形式?
(我尝试查看https://github.com/ridiculousfish/cdecl-blocks,它似乎必须包含这样的内容,但是我在其中找到的与其功能相关的所有代码中,都没有生成C声明的代码。)
关于如何解析C声明的话题已经有很多文章了。
我需要做相反的事情:接收一个类型的树形表示,加上变量名称,并将其打印为对应的C源代码声明。
是否有人写下了这样的算法,并提供可用的形式?
(我尝试查看https://github.com/ridiculousfish/cdecl-blocks,它似乎必须包含这样的内容,但是我在其中找到的与其功能相关的所有代码中,都没有生成C声明的代码。)
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。然后pretty print AST (ast.show()
)。最后将AST转换为C源代码并打印出来。c_generator
模块,该模块在 这里可以找到。它是一个类,带有一个 visit
方法,可以遍历 AST 并输出 C 代码。
const foo (*const array_of_foo)[N];
这样的东西。 - Davislorexamples/c-to-c.py
中。 - Morten Jensen