問題タブ [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 ネストされたノード ビジター
すべてのIFステートメントに対して、ビジターを使用してpycparserでCコードを解析しようとしています。私の観察では、ネストされた IF のない最上位ノードのみにアクセスします。それは意図的なものですか、それとも私のコードに何か問題がありますか?
c - パーサーで「Cライク言語」を「カスタム言語」に変換する
言語「A」で書かれたファイルのコレクションがあり、対応する言語「B」のファイルに翻訳する必要があります。このタスクを自動化できるプログラム/パーサーを作成したいと考えています (おそらく、単一のプログラムではなくツールチェーンです)。ただし、ツールチェーンのプログラムに適した選択肢を見つけるのに苦労しています。
言語 Aは組み込みソフトウェア コード、つまり低水準言語です。90% が標準の C コードで、10% が「カスタム」コードです。つまり、ファイルには、標準の C コンパイラでは理解できない小さなセグメントも含まれています。90% C コードは、C で可能な任意のランダムな C 構造ではありません (セマンティクスに関してこれを解析するのは難しいでしょう) が、特定の繰り返し式、アクション、およびパターンに従います。そして、常に(多かれ少なかれ)同じ方法でこれらのパターンに従います。ほとんどの場合、メモリへの書き込み操作を実行し、C 構造体や列挙型などの複雑な構造は含まれません。
言語 A の通常の低レベル C コードの例:
言語 A の「カスタム コード」の例:
言語 Bは 100% カスタム言語です。この変換は、デバッグ目的で別のツールでファイルを操作するために必要です。上記の例を翻訳すると、おおよそ次のようになります。
注: 私は、Stackoverflow が「どのツールが好きですか?」というオープンな議論のためのサイトであることを意図していないことを十分承知しています。しかし、この質問はむしろ「仕事を成し遂げる意味のあるツールセットが少なくとも 1 つ必要です」のようなものだと思います。
これまでの私の考慮事項とアプローチは次のとおりです。
- パフォーマンスは私のツールチェーンには関係ありません。実装と変更への適応が容易でなければなりません。
- 最初のアプローチ: 言語 A はほとんどが C コードであるため、C コードを AST (Abstract Syntax Tree) に解析する C パーサーを提供するpycparser Python Plugin を最初に考えました。私の計画は、言語 A のファイルを読み込み、AST から言語 B のファイルを作成する Python プログラムを作成することでした。ただし、言語 A の 10% のカスタム プロパティを完全にサポートするために、pycparser プラグインを適応/教育するのは難しいことがわかりました。
- 2 番目のアプローチ: Yacc/Bison や ANTLR などの「汎用パーサー ジェネレーター」を使用します。ただし、ここでは、どのツールが自分のニーズに合っているか (LALR パーサーを備えた Yacc/Bison または LL パーサーを備えた ANTLR)、およびそのようなパーサーを含む適切なツールチェーンをセットアップして (Python などで) データを処理する方法がわかりません。生成されたパーサーがカスタム言語 B を作成するために作成する構造。 選択したパーサー ジェネレーターが、10% カスタム C 言語部分に簡単に適応できる既存の C 言語定義を提供する場合にも役立ちます。また、これまで汎用パーサーを使用したことがないことにも言及しておく必要があります。
このタスクのための有意義なツールのセットについて誰かアドバイスをください。
編集: これが漠然とした質問のように思われる場合はお詫び申し上げます。できる限り正確に記載しようとしました。言語 A と B の例を追加して、言語の構成をより明確にし、言語 A がセマンティクスに関して簡単に理解できる特定の繰り返しパターンに従うことを示しました。
この編集で明快さと広さが改善されない場合は、提案されたとおりにプログラマーに再投稿します。
編集 2 : わかりました。このトピックは明らかにここではまだ置き換えられているように見えるので、ここに質問を撤回します。最初の数人のポスターから貴重な情報をすでに受け取っていたので、汎用パーサー ジェネレーターを使ってさらに実験を行うことができました。
python - LiClipse にモジュールをインポートするときの「未解決のインポート: モジュール」
最近、liclipse 2.4 (Python 3.0 文法) をインストールし、pycparser-master.zip ファイルをダウンロードして展開し、pycparser-master/pycparser/ ディレクトリを Project->Properties->PyDev-PYTHONPATH->External Libraries の下に追加しました。
Python ファイルで以下の import ステートメントを使用しました。
しかし、インタープリターはエラーをスローしているようです。
python - pycparser: C ファイルで関数の終わりを取得する方法
Cファイルを解析するためにpycparserを使用しています。Cファイルの各関数定義の開始と終了を取得したい。しかし、実際に得られるのは関数定義の始まりだけです。
次のようなものを取得したい:
python - byteswap.h での Pycparser 解析エラー
これはかなり具体的な問題であることはわかっていますが、答えを探すためにできる限りのことをしましたが、まだ価値のあるものは何も思いつきません. 私はpycparserを使用して(驚き、驚き)コードを解析しようとしていますが、リンクを実行すると以下のエラーで失敗します。誰かが何か考えを持っているなら、私はいくつかの助けに感謝します.
これはCentOS 7上にあります。
コード: