問題タブ [pycparser]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
691 参照

python - 複雑な構造体の pycparser.plyparser.ParseError

pycparserこのCコードを解析するために使用しようとしています:

https://github.com/nbeaver/mx-trunk/blob/0b80678773582babcd56fe959d5cfbb776cc0004/libMx/d_adsc_two_theta.c

最小限の例と Makefile を含むリポジトリは次のとおりです。

https://github.com/nbeaver/pycparser-problem

pycparserDebian Jessie で v2.14 (pip から) と gcc 4.9.2 を使用。

私が試したこと:

  • -nostdincフラグをgccフォルダーfake_libc_includeに渡します。
  • -D'__attribute__(x)='GCC エクステンションの取り出しに使用
  • たとえば、偽のヘッダーを使用します<sys/param.h>
  • -std=c99コードが C99 互換でない場合に使用します。
  • 私のマシンに異常がある場合に備えて、 redis の例を再現します。

トレースバックは次のようになります。

トレースバックは次の行を指しています。

https://github.com/nbeaver/mx-trunk/blob/0b80678773582babcd56fe959d5cfbb776cc0004/libMx/d_adsc_two_theta.c#L63

次に、この#defineマクロを指します。

https://github.com/nbeaver/mx-trunk/blob/0b80678773582babcd56fe959d5cfbb776cc0004/libMx/mx_motor.h#L484

0 投票する
2 に答える
206 参照

python - GnuCParser でポインタ引数を見つける?

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

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

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

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

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

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

0 投票する
1 に答える
162 参照

python - 任意の C プロジェクトの前処理

Python で良い callgraph プログラムを書きたいので、pycparser を使用します。Pycparser は、抽象構文ツリーを正しく作成するために c ファイルを前処理する必要があります。私の最初のアプローチは-E、ファイルで gcc のオプションのみを使用し、それを pycparser に渡すことでした。しかし、別のプロジェクトではNo such file or directory、gcc が特定のヘッダーを見つけられないため、" " エラーが発生します。Linux カーネルを前処理しようとするgcc -E `find | grep "\.c"\`と、そのようなフォルダーがないため、Linux/ プレフィックスが付いたもののようなヘッダー ファイルがいくつか見落とされます。gcc がヘッダー ファイルの場所を渡して正しく前処理するには、いくつかの追加フラグが必要なようです。任意の C プロジェクトを前処理する一般的な方法はありますか?

さらに、正しく前処理すると、同じ関数の複数のコピーが異なるファイルにあると思います。関数の元のファイルを特定する方法はありますか?

0 投票する
0 に答える
724 参照

python - pyopensslをインストールするpipでの許可拒否エラー

再インストールを強制しようとしてpyopensslいるときに、インストールしようとすると次のエラーが発生しますpycparser。次のコマンドを使用して、Python 2.7 を搭載した Windows 7 64 ビットでこれを実行しています。

トレースバックは次のとおりです。

これが私が気づいたことです:

  • _cffi_backend.pydこれは、他のパッケージのインストールとアンインストールが正常に行われた場合にのみ発生します。
  • pip uninstall cffi問題なく再インストールできますが、存在する場合は常に_cffi_backend.pyd許可エラーが表示されます。cffiこれは、 (たとえば、 ) を呼び出すインストールpyopensslが失敗することを意味します。

これが私が試したことです:

  1. アンインストールと再インストールcffi: 効果なし
  2. 正常に icalcs を使用_cffi_backend.pydしてフル アクセスに設定しました。全員: 影響なし
  3. pipで呼び出すpython -m pip install pyopenssl --ignore-installed: 効果なし
  4. インストール前にすべてのアプリケーションを閉じ、実行中のプロセスを調べました: 効果なし
  5. リブート。大部分はブードゥー教ですが、念のために言っておきますが、効果はありません