問題タブ [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.
python - 複雑な構造体の pycparser.plyparser.ParseError
pycparser
このCコードを解析するために使用しようとしています:
最小限の例と Makefile を含むリポジトリは次のとおりです。
https://github.com/nbeaver/pycparser-problem
pycparser
Debian Jessie で v2.14 (pip から) と gcc 4.9.2 を使用。
私が試したこと:
-nostdinc
フラグをgcc
フォルダーfake_libc_include
に渡します。-D'__attribute__(x)='
GCC エクステンションの取り出しに使用- たとえば、偽のヘッダーを使用します
<sys/param.h>
-std=c99
コードが C99 互換でない場合に使用します。- 私のマシンに異常がある場合に備えて、 redis の例を再現します。
トレースバックは次のようになります。
トレースバックは次の行を指しています。
次に、この#define
マクロを指します。
python - GnuCParser でポインタ引数を見つける?
この C コードのフラグメントを解析しようとしています。
pycparserextGnuCParser
の一部を使用しています。
この回答に基づいてPtrDecl
、いくつかの s が表示されると予想しast.show()
ましたが、結果の解析ツリーから得られるものは次のとおりです。
baz
によって出力されるデータには、「への const ポインター」の痕跡(または「ポインター性」)int
がないことに注意してください。この違いは によるものですか?const
ast.show()
GnuCParser
baz
AST からの型を知るにはどうすればよいですか? 私の実際の C コードには GNU パーサーが必要です。pycparserext バージョン 2016.1 を使用しています。
更新: GitHub で pycparserext の問題を作成しました。
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 プロジェクトを前処理する一般的な方法はありますか?
さらに、正しく前処理すると、同じ関数の複数のコピーが異なるファイルにあると思います。関数の元のファイルを特定する方法はありますか?
python - pyopensslをインストールするpipでの許可拒否エラー
再インストールを強制しようとしてpyopenssl
いるときに、インストールしようとすると次のエラーが発生しますpycparser
。次のコマンドを使用して、Python 2.7 を搭載した Windows 7 64 ビットでこれを実行しています。
トレースバックは次のとおりです。
これが私が気づいたことです:
_cffi_backend.pyd
これは、他のパッケージのインストールとアンインストールが正常に行われた場合にのみ発生します。pip uninstall cffi
問題なく再インストールできますが、存在する場合は常に_cffi_backend.pyd
許可エラーが表示されます。cffi
これは、 (たとえば、 ) を呼び出すインストールpyopenssl
が失敗することを意味します。
これが私が試したことです:
- アンインストールと再インストール
cffi
: 効果なし - 正常に icalcs を使用
_cffi_backend.pyd
してフル アクセスに設定しました。全員: 影響なし pip
で呼び出すpython -m pip install pyopenssl --ignore-installed
: 効果なし- インストール前にすべてのアプリケーションを閉じ、実行中のプロセスを調べました: 効果なし
- リブート。大部分はブードゥー教ですが、念のために言っておきますが、効果はありません