いくつかの C ファイルを分析し、見つかったすべての #define を出力する必要があります。正規表現ではそれほど難しくありません(たとえば)
def with_regexp(fname):
print("{0}:".format(fname))
for line in open(fname):
match = macro_regexp.match(line)
if match is not None:
print(match.groups())
しかし、たとえば、複数行の定義を処理しません。
たとえば、Cでそれを行う良い方法があります
gcc -E -dM file.c
問題は、指定されたファイルの #defines だけでなく、すべての #defines が返されることです。指定されたファイルのみを使用するオプションが見つかりません..
ヒントはありますか?ありがとう
編集: これは不要な定義を除外する最初の解決策であり、定義の名前が実際には元のファイルの一部であることを確認するだけで、完全ではありませんがうまく機能しているようです..
def with_gcc(fname):
cmd = "gcc -dM -E {0}".format(fname)
proc = Popen(cmd, shell=True, stdout=PIPE)
out, err = proc.communicate()
source = open(fname).read()
res = set()
for define in out.splitlines():
name = define.split(' ')[1]
if re.search(name, source):
res.add(define)
return res