31

私はしばらくの間(表面上は学習体験のために)自分の言語を書くことで遊んでみたいと思っていたので、パーサー、インタープリター、コンパイラーの構築に比較的基礎を置く必要があります。それで:

  • パーサー、インタープリター、およびコンパイラーの構築に関する優れたリソースを知っている人はいますか?

編集:私はLex、Yacc、Bisonなどのコンパイラコンパイラ/パーサコンパイラを探していません...

4

12 に答える 12

14

私が今まで読んだコンパイラに関する最高の論文は、Val Schorre による1964 年 の「META II a syntax-oriented compiler writing language」です。( http://doi.acm.org/10.1145/800257.808896 )

10 ページで、彼は驚くほど単純だが非常に効果的なコンパイラー・コンパイラーを構築する方法を示し、コンパイラー・コンパイラーの文法を提供し、午後にそれを手作業で実装するのに十分な詳細を提供します (驚くべき 概念的な瞬間が 1 つあります)。それがどのように再帰するかを理解したとき)、そしてにやにや笑いのために ALGOL のような言語を実装します。この論文は完全なガスであり、コンパイラ技術を扱っている人は必ず読む必要があります。

この論文に基づいた、メタコンパイルに関する優れたチュートリアルを再生するためのリンクを次に示します。 http://www.bayfronttechnologies.com/mc_tutorial.html

于 2009-06-17T07:58:49.407 に答える
9

Steve Yegge(Rich Programmer Food )によるこの非常に面白いブログ投稿では、コンパイラの構築方法について知っておく必要のあるすべてのことを説明していません(ただし、かなりの量の優れた洞察が含まれています)。コンパイラを理解したい理由を説明します。

ヘック、その投稿で私はコンパイラの勉強を始めようとしていました。私にはフルタイムの仕事があり、自宅で3歳で、平均して1日あたり約-1.5時間の空き時間があります。

于 2008-09-03T14:35:38.640 に答える
8

Aho の「Dragon book」は標準的なリファレンスですが、別の良い選択肢としては、Andrew Appel のJava での最新のコンパイラの実装( MLおよびCフレーバーでも利用可能) があります。コンパイラ/インタープリタの必要な各コンポーネントを順を追って説明し、多くの有用なソース コードを提供します。

于 2008-09-03T14:32:34.950 に答える
6

それほど簡単ではありませんが、網羅的です:ドラゴンブック

于 2008-09-03T14:27:41.980 に答える
5

コンパイラの構築:原則と実践は、この主題に関する最高の本です。

于 2008-09-03T14:28:06.787 に答える
5

「Let's build a compiler」 (Jack Crenshaw によるチュートリアル)を見つけました。非常に簡単に理解できます。Jack は、Pascal 用のコンパイラをゼロから作成し、すべてのステップを非常に詳細に説明しています。

于 2008-09-19T15:35:41.453 に答える
4

MIT OpenCourseWare(OCW) サイトには、コンパイラを構築するプロジェクトのクラスがあります...それらは Dragon book と Appel の本を参照していますが、さらに、クラスノートと講義も利用できます。クラスは6.035 - コンピュータ言語工学です。

クラスノートは、再帰降下パーサーを説明するのに非常に役立ちました。

于 2008-09-03T16:14:32.427 に答える
3

私は最近、Java でのプログラミング言語プロセッサを読みました。基本的な概念から始めて、コード生成を含む再帰降下型コンパイラの実装を紹介し、代替アプローチについて十分に説明しているため、お勧めします。ただし、このスレッドで提案されている他の本は読んでいないので、それらとの比較はできません。概念とその実装は十分に説明されているため、Java の詳細な理解がなくても要点を理解できます。

于 2008-09-03T15:57:34.620 に答える
2

残念ながら、古本のサイトで見つける必要があるC でのコンパイラ設計をお勧めします。この本の唯一の本当の問題は、コンパイルの速度が重要な要素であったときに書き直されたため、コンパイラは C で書かれていることです。それは十分な低レベル言語であり、実装理論が実装コードの下に埋もれている場合があります。

インタープリターとコンパイラーの両方について言及しました。実際には、コンパイラよりもインタープリタから始めることをお勧めします。インタープリターを使い始めるのはずっと簡単で、自分のやり方についてすぐにフィードバックを得ることができるので、より楽しく作業できる傾向があります。

于 2008-09-03T15:38:47.973 に答える
2

念のため:

  • 喜んでプレーする
  • 何かをより速く構築し、さらに深く掘り下げるチャンスのように
  • 基盤となるプラットフォームで .NET を使用しても問題ない

...それなら、Dynamic Silverlight SDK 全体のソース コードとして提供されている Microsoft の Dynamic Language Runtime を確認することをお勧めします。

http://www.codeplex.com/sdlsdk

コンソール、共通型システム、一般的な抽象構文ツリーなど、すぐに使用できる機能が多数用意されていることも素晴らしい点です。パッケージには、Python、Ruby、Javascript の 3 つの実装が含まれています。

おそらく、DLR 以外の短い言語を実装し、実際の DLR コードをチェックしてから、基本的なものを自分で構築し始める良い機会です。

いずれにせよ、別の言語フリークから頑張ってください!

于 2008-09-03T16:06:47.080 に答える
1

RE:lex、yacc、bison

それらへのポインタが必要ないということですか、それともそれらを使用することに興味がないということですか?レクサーやパーサーを手動で作成することはお勧めしません。

編集:あなたは「コンパイラ-コンパイラ」が何を成し遂げることができるかについて誇張された感覚を持っているかもしれません:あなたがASTを構築した後にコンパイルの本当に難しい部分が始まります。Aho、Louden、およびAppelの本はすべて非常に優れています。

于 2008-09-03T14:34:20.233 に答える
0

It's an old book, and rather dated, but I've found Brinch Hansen on Pascal Compilers to be a very practical introduction to creating a language and building the elements of a compiler. Despite the name, it's not specific to Pascal. It's very worthwhile if you can find a copy.

于 2008-09-19T17:16:05.300 に答える