3

私は、入力として.cファイルへのパスを取得して、それをコンパイルするPythonプログラムをビルドします。Pythonを使ってCコードをコンパイルすることはできますか?

コンパイルが成功すると、プログラムはOKを出力し、それ以外の場合はBADを出力します。

私はGoogleにしようとしていますが、何も見つかりませんでした。私はまた、コンパイルするプログラムの引数を使ってPython内でcmdを実行しようとしていましたが、それは動作しませんでした。

私は実行したいマシンに非常に特殊なコンパイラがあります。私はPythonをコンパイラとして動作させたくない。ちょうどコードを取得し、私のコンパイラを実行し、答えを見てください。

  • これは、Python 2.4のLinuxサーバーで動作するはずです。

おかげ

+1

distutilsを見るかもしれませんが、gccや類似のコンパイラにPythonレイヤーを提供するだけです。最終的にPythonはコンパイルを実行せず、依存関係も持ちます。 – jondavidjohn

+0

Pyconの素晴らしい話があります。[Pythonを使ってCおよびC++コードをデバッグする(gdbを使用)](http://blip.tv/pycon-us-videos-2009-2010-2011/pycon-2011-using-python- to-debug-c-and-c-code-using-gdb-4895525)が役に立つかもしれません。 – RanRag

+0

コンパイラを実行したい場合は、Pythonでサブプロセスを実行するだけです。その場合、この質問は、Pythonでサブプロセスを実行しようとする他のすべての質問の合計重複です。それを閉じます。ここには、すべてほぼ同じ答えを提供するすべての関連する質問があります。 http://stackoverflow.com/search?q=python+subprocess彼らはすべて「明確化された」質問に答えます。 –

答えて

8

確かに、なぜいけないのでしょうか?もちろん、GCCがインストールされている(またはllvm)のでコンパイルする必要があります。外部プログラムを呼び出すためにos.systemなどの方法を使用することができます。

もちろん、この問題を解決するために既に存在するSConsのようなものを見る方がよいでしょう。

さらに、実際に質問された質問に答えるために、Pythonでコンパイラ/アセンブラ/リンカを書くことを妨げるものはありません。パフォーマンスはおそらくそれほど良くないでしょう。

+0

ありがとうございます。 os.systemは私が必要とするものかもしれません – RanZilber

+1

Sconsがこれをどのように助けますか?あなたは詳細を教えていただけますか? – AdityaPande

6

ステップ1. PLYを取得します。 Python LexとYacc http://www.dabeaz.com/ply/

ステップ2.あなたが見つかったC言語の規則を使用するように

ステップ3.微調整PLY C. http://www.lysator.liu.se/c/ANSI-C-grammar-y.htmlためのYacc/Lexの設定を検索します。

ステップ4.実行します。あなたはCコードを "コンパイル"しています - 構文をチェックしてください。

+0

おかげで、でも、私が必要とするものではなく、私の編集を見守る – RanZilber