5

せっかちな人のための要約: 共通言語構造のコードを生成するための良い参考文献を探していますが、解析はしていません。

私はプログラミング言語に興味があり、できるだけ文献を読むようにしています。しかし、それらのほとんどは、機能的および理論的な観点からトピックをカバーしているため、アイデアを実装するどころか、理解するのが難しいと思います.

問題は次のとおりです。より命令的かつ実用的な方法でトピックをカバーするプログラミング言語の実装について、どのリソースを提案しますか?

たとえば、「Lua 5.0 の実装」という論文は非常に有益です。

解析やトークン化に関する記事を求めているわけではないことに注意してください。

4

10 に答える 10

10

ここにたくさんの良い教科書があります:

Modern Compiler Implementation in Java (Tiger book) AW Appel Cambridge University Press、1998 ISBN 0-52158-388-8 多くの言語機能のテクニックを含む、コンパイラの実装に関するテキスト チュートリアル

Compilers: Principles, Techniques and Tools (Dragon book) Aho、Lam、Sethi、Ullman Addison-Wesley、2006 ISBN 0321486811 古典的なコンパイラの教科書ですが、フロントエンドの強調は時代を反映しています。

Advanced Compiler Design and Implementation (Whale book) Steven Muchnick Morgan Kaufman Publishers、1997 ISBN 1-55860-320-4 基本的に最適化のレシピ本。非常に完成度が高く、産業従事者や研究者に適しています。

Engineering a Compiler (Ark book) Keith D. Cooper, Linda Torczon Morgan Kaufman Publishers, 2003 ISBN 1-55860-698-X バックエンドと実装技術に重点を置いた現代の教室の教科書。

現代アーキテクチャー向けの最適化コンパイラー Randy Allen および Ken Kennedy Morgan Kaufman 出版社、2001 年 ISBN 1-55860-286-0 並列化やメモリ階層の最適化などの最適化に焦点を当てた最新の教科書。

プログラミング言語語用論 Michael L. Scott Morgan Kaufmann Publishers、2005 ISBN 0126339511

于 2008-09-30T14:36:30.933 に答える
3

おそらく (私はそれを読みましたが、実行していません)、An Incremental Approach to Compiler Constructionは優れています。著者がコンパイラ コースをどのように教えているかが説明されています。

要約から:

コンパイラは魔法のアーティファクトであり、ウィザードによって注意深く作成され、単なる人間には計り知れないものであると認識されています。コンパイラに関する本は、ウィザード トークとしてより適切に説明されています。実際のコンパイラは、教育ツールとして機能するには複雑すぎます。また、実際のコンパイラと教育玩具のコンパイラとのギャップは大きすぎます。初心者のコンパイラー作成者は、「代わりにインタープリターを作成した方がよい」という、突き抜けられない障壁に直面して困惑しています。</p>

この論文の目標は、その障壁を打破することです。コンパイラーの構築は、インタープリターの構築と同じくらい簡単であることを示します。私たちが構築するコンパイラは、Scheme プログラミング言語の大きなサブセットを受け入れ、パーソナル コンピューティングの主要なアーキテクチャである Intel-x86 アーキテクチャ用のアセンブリ コードを生成します。コンパイラの開発は、多くの小さな増分ステップに分割されます。すべてのステップにより、Scheme の段階的に拡張するサブセットに対して完全に機能するコンパイラが生成されます。コンパイラの各ステップでは、アセンブルしてからハードウェアで直接実行できる実際のアセンブリ コードが生成されます。読者は基本的なコンピューター アーキテクチャ、つまりそのコンポーネントと実行モデルに精通していることを前提としています。Intel-x86 アーキテクチャの詳細な知識は必要ありません。

コンパイラの開発については、拡張チュートリアルで詳しく説明されています。チュートリアルには、包括的なテスト スイートと組み合わせた自動テスト機能などのサポート資料が用意されています。スキームの現在および将来の実装者が、この論文で高性能コンパイラを開発する動機とその目標を達成するための手段を見つけてくれることを願っています。

于 2009-08-28T15:13:51.477 に答える
2

「ドラゴン」と「タイガー」の本(上記を参照)はどちらも優れていますが、「タイガー」(アペル)の本は少し密度が高いと思います。また、 DavidGalesによるModernCompilerDesignも非常に気に入っています。理解に役立つツールとユーティリティについては、次の1つ以上を確認することをお勧めします。

  • lexおよびパーサー生成用のJavaaCC
  • lexおよびパーサー生成用の文法
  • コード生成のためのJasminJasper
于 2008-10-13T18:31:45.897 に答える
2

ANTLRで遊ぶことをお勧めします。少し前に使ったことがありますが、とても使いやすいです。

于 2008-09-30T15:00:42.263 に答える
1

もう 1 つのヒント: GCC を掘り下げないでください。それはあまりにも複雑です。もっと研究的でシンプルなものが必要な場合は、Java で書かれた Java コンパイラや Erlang で書かれた Erlang コンパイラのようなものを検討することをお勧めします。

于 2008-10-12T19:00:49.427 に答える
1

私のお気に入りは、Robert Morgan の「Building an Optimizing Compiler」です。非常に実用的で、静的な単一の割り当てをカバーします。

于 2008-10-01T15:45:59.837 に答える
0

私はNicolasWirthによるCompilerConstructionが好きですが、それはおそらく(Turbo)Pascalを学んだことが、私がコンピューターサイエンスに入ることに決めた理由です。

http://www-old.oberon.ethz.ch/WirthPubl/CBEAll.pdf

于 2009-04-30T11:45:52.453 に答える
0

LLVMプロジェクトとその出版物とチュートリアルを調べてみてください。

于 2008-09-30T14:51:29.383 に答える
-1

パープルドラゴンブックは史上最高です。

于 2008-09-30T14:36:39.560 に答える