如何从 pycparser 生成的 ast 中找到 switch 语句?

how to find switch statement from an ast generated from pycparser?

我正在尝试使用 pycparser 解析 c 文件并找到 switch 语句 我使用 https://github.com/eliben/pycparser/blob/master/examples/explore_ast.py 这个 link 生成了 ast。 然后使用 n = len(ast.ext) 我找到了从 ast 生成的 exts 的长度。 现在我必须从 ast 中找到 switch 语句 我试着做 如果 re.findall(r'(开关(\s*'),ast.ext) 并匹配正则表达式以查找开关案例,但它没有发生。 由于我是 pycparser 的新手并且对此一无所知,因此如何进行此操作

你不能运行 pycparser AST 上的正则表达式匹配!

pycparser 存储库中有多个示例可以为您提供帮助:explore_ast.py,您已经看过这些示例,可以让您使用 AST 并探索其节点。

dump_ast.py 展示了如何转储整个 AST 并查看您的代码有哪些节点。

最后,func_calls.py 演示了如何遍历 AST 以查找特定类型的节点:

class FuncCallVisitor(c_ast.NodeVisitor):
    def __init__(self, funcname):
        self.funcname = funcname

    def visit_FuncCall(self, node):
        if node.name.name == self.funcname:
            print('%s called at %s' % (self.funcname, node.name.coord))
        # Visit args in case they contain more func calls.
        if node.args:
            self.visit(node.args)

在本例中 FuncCall 个节点,但您需要切换节点,因此您将创建一个名为 visit_Switch 的方法,访问者将找到所有 Switch 个节点。