2013-03-10 127 views
5

我想知道專業程序員如何創建自己的編程語言。
他們是否只創建一個讀取文本文件並編譯爲可執行文件的編譯器(考慮到沒有語法錯誤等)?我不打算創建自己的編程語言(我顯然太沒經驗了),我只是想知道他們是如何做到的。創建編程語言

回答

3

如果你有興趣,有一個偉大的自由當然,你可以拿在Udacity,這將給你一個好主意:https://www.udacity.com/course/cs262(編程語言 - 建立一個Web瀏覽器)。我還沒有完成課程的一半,但我們已經學習了一些有趣的概念以及詞法分析的基礎。您可能認爲Web瀏覽器與編程語言無關(我做過),但實際上,除了將代碼編譯爲可執行形式之外,它們幾乎完全相同。他們都必須閱讀,解析和lex代碼,並根據語言的規範進行解釋。 JavaScript也是每個現代瀏覽器都內置的一種非常強大的語言(現在許多其他語言也被瀏覽器解釋)。

爲了給你另一個例子,Python的首次實現是用C編程語言實現的。這允許python程序使用C源代碼。另外還有一個可以與Java程序互操作的Python(jython)。 Python Python的含義是什麼(如果忽略電池包含的方面)是語言規範,包括什麼是保留字,對象如何存儲在內存中,什麼樣的表達式和控制結構是有效的等等。 。我絕不懂得開發像Python這樣的「嚴肅」語言。但是有人會用另一種語言來開發它。即使你確實有能力開發另一種語言,你也必須有一些特殊的東西才能被廣泛使用,因爲有數以千計的編程語言,其中許多被認爲是業餘愛好語言(例如,有這樣的語言設計他們的源代碼將類似於莎士比亞戲劇或配方)。

+0

謝謝!我現在觀看了一些視頻,我認爲這會幫助我理解它。首先,我想「爲什麼瀏覽器?我想學習/瞭解如何編程語言」,但後來我想到了它,並意識到你說的是什麼。 – 2013-03-10 15:47:10

3

您應該閱讀編譯器構造。一些主要領域包括:

  • 詞法分析
  • 語法分析
  • 語義分析
  • 代碼優化
+0

我估計前3個點可以省去一個「無語法」編程語言,它允許開發人員直接定義程序結​​構而不是基於分析的編譯器。我一直在嘗試做類似的事情,但在編程方面我很綠。 – dtech 2013-03-10 14:42:18

+1

等待,您列出代碼*優化*,但不代碼*生成*也不*解釋*?如同那樣,讓程序做任何事情的東西呢? – delnan 2013-03-11 18:08:08

+2

@delnan - 通知我說主要區域的'some',意味着更多.... – 2013-03-12 08:23:35

2

大多數情況下,當有人需要編程語言時,他們正在創建一個「域特定語言」。基本上他們正在創建一種編程語言,它是針對他們需要解決的問題而構建的。

通常這些編程語言不會生成可執行代碼。他們通常對程序進行分析並在內存中生成一個數據結構,這是程序的一種表示形式,以便於評估程序的語句。然後,他們直接從該數據結構評估這些語句,而不是將該數據結構轉換爲一系列彙編語言指令。

這樣做的編程語言被稱爲'解釋'。還有一些非常流行的編程語言屬於這一類。另一個用於這種語言的術語是'腳本語言'。所有腳本語言都被解釋,但並非所有的解釋語言都被稱爲腳本語言。

生成「可執行」或CPU直接執行的一系列指令的策略稱爲「編譯」。而使用這種策略的語言被稱爲「編譯」語言。 C和C++都是編譯語言。

一個有趣的事情是編譯或解釋只是不同的執行策略。可以創建一個C解釋器,並且可以編譯Python程序。但使用一種執行策略獲得廣泛接受的語言很少會看到使用另一種執行策略的實現。

所以,一個程序員不會創建一個新的編程語言最重要的事情是這些:

  1. 創建一個詞法分析器和/或解析器。 (這是將一系列字符轉換爲表示程序的內部數據結構的部分。)
  2. 創建一個執行引擎,用於執行由數據結構表示的語句。

通常選擇域特定語言的語法使第一步非常容易。選擇一種非常接近現有語言的語法,以便程序員可以重用已經存在的語法分析器,或者專門選擇語法以使語言非常易於解析。

第二步通常相當平凡,但某些語言功能可能會使事情變得非常複雜。