26

我一直想玩一段時間編寫自己的語言(表面上是爲了學習體驗),因此需要相對紮實地構建解析器,口譯員和編譯器。所以:解析器,解釋器和編譯器上的學習資源

  • 有沒有人知道構建解析器,解釋器和編譯器有什麼好的資源?

編輯:我不找編譯器編譯器/分析器,編譯器,如萊克斯,Yacc的和野牛......

+1

可能重複(HTTP://計算器。com/questions/1669/learn-to-write-a-compiler) – nawfal 2013-05-18 20:08:07

回答

7

阿霍的「龍書」是標準的參考,但另一個不錯的選擇是安德魯阿佩爾的Modern Compiler Implementation in Java(也可在MLC口味)。它逐步介紹了編譯器/解釋器的每個必需組件,並提供了許多有用的源代碼。

+0

+1,擁有它們,好書。 – 2010-08-21 02:41:29

1

RE:法,YACC,野牛

你的意思是你不需要指針他們或者,你是不是願意使用它們?我不建議手動編寫詞法分析器或解析器。編輯:你可能誇大了什麼是「編譯器 - 編譯器」可以完成的感覺:編譯真正困難的部分是在你構建AST之後開始的。 Aho,Louden和Appel的書都很不錯。

+0

s/hard/hard and fun/g – 2010-08-21 02:43:09

+0

[@Chris Conway](http://stackoverflow.com/questions/41785/learning-resources-on-parsers-interpreters-and-compilers#41805)由於一個主要原因研究這個主題是要了解它,我更多地從底層開始構建這樣的東西。我知道很多_compiler-compilers_等,我可能會研究它們是如何實現的,但除此之外,我想要的資源將幫助我更好地理解解析器,解釋器和編譯器如何工作以及如何實現他們。 – akdom 2008-09-03 14:43:58

7

這個高度娛樂性的博客文章由史蒂夫·耶格(Rich Programmer Food)不會告訴你一切,你需要了解如何建立一個編譯器(雖然它包括良好的洞察力相當數量的),但它確實一個很好的解釋爲什麼你想了解compliers。

哎呀,那篇文章幾乎讓我開始學習編譯器,我有一份全職工作,一個3歲的家庭,平均每天約-1.5個空閒時間。

2

我推薦Compiler Design in C,你不得不在舊書網站上找到它。本書唯一真正的問題是,編譯速度是一個重要因素,因此編譯器是用C語言編寫的,因此它被寫回。這足以構成一種低級語言,有時實現理論被埋在實現代碼之下。

您提到了Interpreters和Compilers。我實際上建議從解釋器開始而不是編譯器。開始使用口譯員更容易,他們往往會更有趣,因爲您可以立即獲得有關您如何做的反饋。

2

我最近閱讀Programming Language Processors in Java,它會向您推薦它,因爲它以基本概念開始,然後帶您完成遞歸下降編譯器,包括代碼生成以及大量其他方法的討論。雖然我沒有閱讀過這個主題中的其他建議書,所以無法提供與這些主題的比較。不要被Java中的部分所忽略,如果你不瞭解java,因爲這些概念和它們的實現已經足夠好的解釋了你不需要對Java有詳細的瞭解就能獲得主旨。

1

萬一你:

  • 願意玩
  • 像的機會,建立更快的東西,然後再深入
  • 都OK與底層平臺
使用.NET

...然後,我建議您檢查微軟的動態語言運行時,它是作爲整個動態Silverlight SDK中的源代碼提供的。

http://www.codeplex.com/sdlsdk

一些關於它的好處之一是,它提供了很多現成的使用功能,如控制檯,通用類型系統,通用的抽象語法樹等,以及包包括三種實現: Python,Ruby和Javascript。

也許這是一個很好的機會實現DLR的簡短語言,然後開始檢查實際的DLR代碼,然後開始自己構建基本的東西。

無論如何,最好的運氣來自另一種語言怪胎!

3

麻省理工學院開放式課程(OCW)網站有一個課程,其目的是建立一個編譯器...他們提到龍書和Appel的書,但此外,還有班級筆記和講座。班級是6.035 - Computer Language Engineering

我發現類註釋對解釋遞歸下降解析器非常有用。

3

我找到了"Let's build a compiler" - Jack Crenshaw的教程,非常容易理解。 Jack從頭開始爲Pascal構建一個編譯器,並對每一步都做了非常詳細的解釋。

0

這是一本舊書,而且相當過時,但我發現Brinch Hansen在Pascal Compilers上是創建語言和構建編譯器元素的非常實用的介紹。儘管名稱不同,但並不是Pascal特有的。如果你能找到一份副本,這是非常值得的。

9

我曾經在編譯器上看過的最好的論文的日期是 Val Schorre的「META II一種面向語法的編譯器編寫語言」。 (http://doi.acm.org/10.1145/800257.808896

在10頁,他展示瞭如何建立一個驚人簡單,但 非常高效的編譯器編譯器,提供 你用編譯器編譯語法併爲您提供足夠的 細節讓你的手實現它在一個下午(一個驚人 概念一刻,當你意識到它是如何遞歸),並且只是笑着實現了 類ALGOL語言。這篇論文是一種完整的氣體,對任何使用編譯器技術的人來說,都應該是必需的。

這裏有一個鏈接,可以根據論文在metacompiling上找到一個很棒的教程, 。 [學習寫一個編譯器]的 http://www.bayfronttechnologies.com/mc_tutorial.html