1

この C コードのフラグメントを解析しようとしています。

void foo(const int *bar, int * const baz);

pycparserextGnuCParserの一部を使用しています。

この回答に基づいてPtrDecl、いくつかの s が表示されると予想しast.show()ましたが、結果の解析ツリーから得られるものは次のとおりです。

FileAST:
  Decl: foo, [], [], []
    FuncDecl:
      ParamList:
        Decl: bar, ['const'], [], []
          TypeDeclExt: bar, ['const']
            IdentifierType: ['int']
        Decl: baz, [], [], []
          TypeDeclExt: baz, []
            IdentifierType: ['int']
      TypeDecl: foo, []
        IdentifierType: ['void']

bazによって出力されるデータには、「への const ポインター」の痕跡(または「ポインター性」)intがないことに注意してください。この違いは によるものですか?constast.show()GnuCParser

bazAST からの型を知るにはどうすればよいですか? 私の実際の C コードには GNU パーサーが必要です。pycparserext バージョン 2016.1 を使用しています。

更新: GitHub で pycparserext の問題を作成しました。

4

2 に答える 2