解決済みの質問
C言語初心者のため、稚拙な文章になる可能性があることを最初にお詫びします。
現在Microsoft社のMicrosoft Visual C++ 6.0を用いてCドライブのルートにある「temp.c」というソースファイルをコンパイルするアプリケーションを作ろうと思っているのですが、ネット上で「C言語 コンパイラ 作成」等と検索しても、既にコンパイラがあることを前提としたホームページしか見つけることができず、肝心のコンパイラをどのように作ったらよいのかということが載ったホームページが見つかりません。
というわけで、今回はコンパイラをどのように作ったらよいのかというヒントだけでもいいので教えて頂けないかと思い投稿させて頂きました。
ちなみに「temp.c」はそこまで複雑なソースではなく、DOS上のアプリで、リソースやアイコンなどは用いないものです。
そもそも「コンパイラを作る」ということ自体が愚かな行為なのかと思ったりもします。
私が所持しているBcpadやMicrosoft Visual C++ 6.0に付属している既存のコンパイラを利用するということも考えたのですが、BcpadやMicrosoft Visual C++ 6.0の本体以外からコンパイラをどのように利用していいのかもわかりません。
どうぞ忌憚の無い意見をよろしくお願いします。
ちなみにOSはXPのSP3です。
投稿日時 - 2009-01-08 16:46:39
あの・・・水を差すようで恐縮しますが
それって「コンパイラを作る」ではなくて
「コンパイラを呼び出す」だけでは?
ボタンを押したら
外部プログラムとして cc コマンドを実行するだけ…。
最近 C++ やってないんで忘れましたが WinExecとか CreateProcess とか使って…。もちろん環境変数や実行パラメータはきちんとセットした上でですけど…。Microsoft Visual C++ 6.0でもコマンドプロンプトだけでコンパイルできますから。
投稿日時 - 2009-01-09 00:59:22
お礼
恥ずかしい話ですが、正にその通りでした。
コマンドプロンプトでコンパイラを呼び出すという初歩的な方法を忘れていました。
コマンドを打ち込んでコンパイルするということをしばらくの間やっていなかったせいですっぽりとその考えがぬけていました。
おかげさまで、Microsoft Visual C++ 6.0のバッチファイルを呼び出して、コマンドプロンプト上で「cl C:\temp.c」を実行するプログラムを組むことにより疑問は完全に解決致しました。
本当にありがとうございました。
投稿日時 - 2009-01-09 14:10:07
1人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(7件中 1~5件目)
いきなり C言語のフルセットを作ろうとは考えない事。
第一歩は超サブセット。
main(){} のみ。
使える関数はputs()のみ。
変数は無し。
なんか簡単そうでしょう。
それが出来たら(きっとできます)
次は関数の追加、 戻り値を判定して呼び出す関数を変える機能。
まだ変数は無し。
非常に単純処理系から思わぬ大きな収穫を得る事でしょう。
投稿日時 - 2009-01-08 21:41:54
お礼
なるほど、いきなりソースファイルならばなんでもコンパイルできるものを考えるのではなく、いたって単純なソースからコンパイルする方法を考えるということですね。
コンパイラを1から作るということになったら参考にさせて頂きたいと思います。
アドバイスありがとうございました。
投稿日時 - 2009-01-08 23:22:13
アマゾンで「コンパイラ」で検索すればコンパイラの作り方を解説した書籍が各種見つかります。
実行効率を考えずANSIに準拠しようとか思わなければ作る事自体はそれほど「無謀」では無いと思います。
分かりやすかったのは
http://www.amazon.co.jp/dp/4839919232
Javaで書いてるのでC言語しか読めないとつらいかも。
ネイティブでなくても良ければ
http://www.amazon.co.jp/dp/4839919232
とかは良いかもしれません。
投稿日時 - 2009-01-08 21:04:23
お礼
アドバイスありがとうございます。
とりあえず他の方のアドバイス等も参考にさせて頂いて、1からコンパイラを作るというのはやめようと思います。
いつか必要な時からきたら参照させていただきたいと思います。
投稿日時 - 2009-01-08 23:20:35