pycparser是否支持用户定义的类型?

时间:2017-11-05 03:07:04

标签: python c parsing pycparser

pycparser是否支持用户定义的类型?我想从* .C文件获取具有用户定义类型的函数列表作为返回类型。

1 个答案:

答案 0 :(得分:2)

确实如此。您只想为FuncDef个节点编写访问者。

FuncDef包含Decl,其子类型为FuncDecl。 此FuncDecl的返回类型为其子类型。

返回类型是TypeDecl,在这种情况下是类型标识符 是它的类型子,或者它是PtrDecl,在这种情况下,它的类型子类是TypeDecl,其类型子类型是类型标识符。

知道了吗?下面是一个示例FuncDef访问者,它打印每个函数的名称和返回类型:

class FuncDefVisitor(c_ast.NodeVisitor):
"""
A simple visitor for FuncDef nodes that prints the names and
return types of definitions.
"""
def visit_FuncDef(self, node):
    return_type = node.decl.type.type
    if type(return_type) == c_ast.TypeDecl:
        identifier = return_type.type
    else: # type(return_type) == c_ast.PtrDecl
        identifier = return_type.type.type
    print("{}: {}".format(node.decl.name, identifier.names))

解析cparser发行版中的hash.c示例文件时的输出:

hash_func: ['unsigned', 'int']
HashCreate: ['ReturnCode']
HashInsert: ['ReturnCode']
HashFind: ['Entry']
HashRemove: ['ReturnCode']
HashPrint: ['void']
HashDestroy: ['void']

现在您只需要过滤掉内置类型,或过滤掉您感兴趣的UDT。