2012-07-29 67 views
3

我對底層概念比如操作系統,算法,數學證明軟件正確性等很感興趣。是否可以用高級語言實現編譯器?

我最感興趣的是編譯器。我開始瞭解它們,並希望爲了學習而實現一個玩具編譯器,也許它變得很大(你永遠不知道,對吧?)。

我的目標是實現類似lua的靜態類型,線程感知編程語言(當然第一個目標是具有基本堆棧操作的解釋器)。我的問題是,我對c,C++或pascal等低級語言幾乎沒有興趣,我想知道是否可以在動態類型環境中爲靜態類型語言實現編譯器?

我有興趣在lua或python中實現這樣的語言(雖然lua更適合我)。

+6

當然,這是可能的。編譯器只是一個將字符串轉換爲其他字符串的程序,通常通過語法樹,這是大多數高級語言可以做到的。但是,您必須瞭解您正在編譯的語言*爲* ... – 2012-07-29 23:55:54

+0

我建議您嘗試一下,看看您可以在一天內找到什麼,然後再查看一週。一旦你完成了它,你將會得到比你從其他任何地方都能獲得的問題更多的答案。 – 2012-07-30 00:23:27

+0

[是](https://www.google.de/search?hl=de&q=Compiler+in+lua&sei=8c0WUJS3DoTPhAfsooCQAg&gbv=2)。 – 2012-07-30 18:09:35

回答

6

簡單的問題:是的,絕對的,它一直在做。大多數編譯語言最終都是「自舉」的,因此他們自己的編譯器都是用自己的語言編寫的:例如,標準Java編譯器javac是用Java編寫的。

2

是的。事實上,C#的最新版本的編譯器將實施...在C#:http://blogs.msdn.com/b/csharpfaq/archive/2011/10/19/introducing-the-microsoft-roslyn-ctp.aspx

(我說的是羅斯林C#庫:)

這項工作的基礎是使用C#編寫的新C#編譯器(以及用VB編寫的VB編譯器 ,有關詳細信息,請參閱VB團隊博客)。

編輯

檢查了這一點:https://bitbucket.org/pypy/pypy

它是用Python編寫的Python的實現。

+0

此評論也發送至上述回答者: C#和java是靜態類型的,它們的編譯器是用靜態類型語言編寫的,但我打算在靜態類型化環境中實現靜態類型的語言編譯器。 – 2012-07-30 00:07:22

+0

我不明白爲什麼你不能用動態類型語言來做它。 – 2012-07-30 00:08:54

+1

Scheme和Smalltalk環境傳統上一直是自我託管的 - 對你來說是否足夠動態? – 2012-07-30 00:17:08

-1

至於其他人都指出,是的,這是可能的,但是......

1-有了一個編譯器,通常實施的編程語言和用於執行該實現的之間的耦合是非常薄。另一方面,各種語言有不同的社區和各種「專業領域」。對編寫編譯器而言,前面的函數式編程語言(Haskell,Ocaml等等)有更豐富的用例和例子庫,你可能想要探索一下。他們的社區也充斥着編程語言極客非常樂意分享他們的經驗。

2-如果你有興趣編寫一個解釋器(或翻譯器),那麼故事是不同的。主機語言的一些特點強烈影響女巫的易用性解釋語言中的某些功能可以實現。例如,應用程序順序,動態範圍和閉包在主機中更容易實現,並且解釋型語言遵循相同的規則。

相關問題