pycparser を使用して c ファイルを解析し、https://github.com/eliben/pycparser/blob/master/examples/explore_ast.pyこのリンクを使用して ast を生成した switch ステートメントを見つけようとしています。n = len(ast.ext) を使用して、ast から生成された ext の長さを見つけました。今、私は試した ast から switch ステートメントを見つけなければなりません if re.findall(r'(switch(\s*'),ast.ext) 正規表現と一致させて switch ケースを見つけますが、それは起こっていません。これは、私がpycparserにまったく慣れていないため、それについてまったくわかりません
質問する
163 次
1 に答える
0
pycparser AST で正規表現マッチングを実行することはできません!
pycparser リポジトリには、役に立つ複数の例がありますexplore_ast.py
:
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
ノードを見つけます。
于 2021-02-15T18:39:45.027 に答える