2009-03-06 8 views
4

Cのような言語のコンパイラを書くのは私のグループの大学の仕事です。もちろん私は愛するC++の小さな部分を実装しようとしています。
正確な仕事は絶対にばかげており、講師は自分自身でコンパイルできる必要があると言いました(自分自身をコンパイルできなければならない)ので、BoostやSTLなどのライブラリを使用しないことを意味しました。
彼は実装が難しいため、テンプレートを使用したくありません。
私は自分でこのプロジェクトを書くつもりなので、5月末の締め切り - 6月中旬(今年)の締め切りで、テンプレートだけでなく、ネストされたクラス、名前空間、構文解析レベルの仮想関数テーブル
PS C++でnoobieではない自分のC++コンパイラで、テンプレート、ネストされたクラスなどのC++の強力な機能を理解するにはどうすればよいですか?

+0

何年ものスペシャリストが実装した独自の機能を再実装できると見積もっても面白いです。うわー! –

+0

これはGradやUndergradのコースですか? –

+0

いいえ、その本物ではありません。 Cは(グループでさえ)十分に難しいでしょう。 –

答えて

28

Cコンパイラに固執する。

まともなCコンパイラ(、特に)をコンパイルするのは難しいですね。ネストされたクラスやテンプレートのようなC++のすべての機能をサポートしようとすると、あなたは狂ってしまいます。おそらくグループがそれを行うことができるかもしれませんが、あなた自身で、私はCコンパイラがそれ以上に十分だと思います。

これでデッド・セットになっている場合は、少なくともCのような言語を実装してください(あなたに何かがあるので)。 次に、は誇示することに焦点を当てています。

+0

私はコンパイラをとったとき、私たちがプロジェクトでできるように機能を追加しました。もちろん、私はグループ内でアセンブラ経験のある唯一の人だったので、私たちが持っていた限りでは得られませんでした。 –

1

名前空間またはネストされたクラスのどちらでも、仮想関数は構文レベルが非常に単純で、構文解析のための1つまたは2つ以上のルールがあります。より高いレベルで、決定するときに、どんな関数/クラス(名前シャドーイング、名前空間間のあいまいな名前など)を選択するか、バイトコード/ ASTを実行するようにコンパイルするときにははるかに複雑です。したがって、これらを書くことができるかもしれませんが、必要でない場合はスキップして、裸の機能モデルを作成してください。

22

「正確な仕事は絶対に愚かです」 - 私は、あなたがその判断を公正に行う立場にあるとは思わない。そのビューを削除する方がよいでしょう。

「私はこのプロジェクトを自分で書くつもりです。あなたはグループプロジェクトだと言っています。あなたのグループは、C++に変身するはずがないので、自分で離陸して作業しているというあなたの意見に賛同したくないと言っていますか?私は変更をお勧めしたいもう一つのビットがあります。

あなたはC++についての知識は重要ではありません。文法、パーサ、レクサー、AST、コード生成の能力ははるかに緊密です。

あなたや割り当てについてもっと知ることなく、5月末までに元の割り当てを完了するにはうまくいくと言えます。それは3ヶ月先です。割り当てに固執する。その困難であなたを驚かせるかもしれません。

あなたが早期に終了し、あなたのチームにあなたの義務を果たしたら、C++機能を追加するために作られたものを自由に変更する必要があると思います。

私はBjarne StroustrupがCにオブジェクトを追加するのに3ヶ月以上かかると思います。自分自身を過大評価したり、元の割り当てを過小評価したりしないでください。

+2

グループで働いている教育経験の一部。あなたが実生活でやらなければならないもの。私は他の人にも良いアイデアがあることを知ります。 – EvilTeach

+0

正確には、EvilTeach。まあまあ。 – duffymo

1

完全なコンパイラについて、コード生成とともに話している場合は、それを忘れてしまいます。もしあなたがちょうど文法的な文法分析の側面を行うつもりなら、あなたが使っているコンパイラビルディングツールに依存して、テンプレートのいくつかのフォームがちょうど時間枠内で実行可能になるかもしれません。

7

割り当てに従ってください。のCのようなコンパイラを書く言語! 私は、サブセットのCを選択します。浮動小数点データ型と、コンパイラの構築に必要でないその他のすべての機能を削除します。

Cコンパイラの作成は多くの作業です。あなたは数ヶ月でそれをすることができなくなります。 C++コンパイラを書くことはまったく狂っています。あなたは5年間でそれをすることができません。

10

問題ありません。そして、あなたがそれをやっている間に、それを実行するためのオペレーティングシステムを実装してみませんか?

+0

1つまたは複数のVMを実装することを忘れないでください。 –

2

時間枠内でcのような言語を完成させることができます。あなたが1つ以上のコースを取っていると仮定すると、それはまさにあなたが時間内にできることです。 C++も実行可能ですが、余分な時間を要します。 C++テンプレート/仮想関数を実行するためのエクスペリエンスは過度に過大評価されており、割り当てがすべて失敗する可能性があります。だから、Cのサブセットコンパイラを使うのが良いでしょう。また、QAにかかる時間も考慮する必要があります。あなたが徹底的にQAをしたいのなら、それはまた良い時間を取るでしょう。

3

クラスプロジェクトでは、コンパイラーがコンパイルできるようにすることは少し質問するだけです。私はこれが質問の中で愚かな意味を持っていたと考えています。つまり、実装するCの量を正確に把握し、コンパイラを構築する際にそれに固執する必要があります。したがって、単にSTLマップを使用するのではなく、プリミティブを使用してシンボルテーブルを構築します。これは、データ構造のコースには役立つかもしれませんが、コンパイラコースのポイントを逃してしまいます。コンパイラに関連する問題を理解し、データ構造をコーディングするのではなく、使用するデータ構造を選択する必要があります。

コンパイラをビルドすると、コンパイラがそのコードを保持した後に実際にコードがどのようになるかを理解する素晴らしい方法です。ターゲット言語は何ですか?私がコンパイラをとったとき、ソーシャル・パスカルからアセンブリになるコンパイラを作るのに全学期中3人がかかっていました。それは些細なことではありません。最初はシンプルに見えるものの1つですが、その中に入るほど複雑なものになります。

5

すでに言及したいくつかの点を強調し、いくつかの参考文献を挙げます。

1)最適化されていない1989年のANSI C標準へのスティック。

2)適切な指導、適切な組織、相当な労力を費やして心配する必要はありません。

3)カバーを覆うThe C Programming Languageのカバーをお読みください。

4)Dragon Bookからコンパイラ開発の重要な概念を理解してください。

5)コードbooklccをご覧ください。

6)

7)Lex and Yacc(またはFlexとバイソンを見てみましょう)Cコンパイラを書くには、(ある程度まで、それは自己をコンパイルすることができます)プログラマの間の通路の儀式の儀式です。楽しめ。

関連する問題