設計一個新的編程語言後,如何實現它?

我們目前是大二一個團隊,正在設計一款新的編程語言。但是不知道如何去實現它,希望各位給些建議。你們可能會說我們能力不夠,但是我們可以邊學邊做,沒有誰生來就回的。

真心希望各位給一下具體可行的意見。

#01補充-2017-9-19

語言將支持跨平台,主要用以支持互聯網軟體而不是傳統的桌面軟體

其中最為迷茫的是因為我們需要對數據類型進行全新設計以支持我們語言的最大亮點(關於亮點就不變敘述了),所以對如何實現編程語言新的數據類型比較迷茫,要是需要彙編的話,要怎麼做,學哪方面的東西


該咋實現咋實現,先硬著頭皮瞎寫。年齡和經驗都不是問題,另一個答主Michael Li是高三的,他高二就做過編譯器了,然後那個車萬頭像的是初中做編譯器的,因此大二的題主大可放心。

根據我根本不存在的經驗,這一過程,說白了就是parse成AST,然後map成信息更豐富的另一顆AST (兩件事一起做會有點惱火,推薦分開),然後看你開心搞不搞優化,然後要麼規約求值,要麼編譯到llvm/自製虛擬機/生成渣優化彙編/JVM,然後就完成了你的目標。

類型系統很麻煩,你們可以考慮做個SystemF的子集(逃


「其中最為迷茫的是因為我們需要對數據類型進行全新設計以支持我們語言的最大亮點「

所以說你們的賣點是類型系統咯?

那就先從刷 tapl 和 eopl 開始吧


原回答不刪除,畢竟我還想造福一下社會。

連編譯原理都學不清楚就開口互聯網閉口5G,自稱設計語言不知強類型弱類型,同為大二學生,你還是捫心自問一下

你走運了嘛?

以下是原答案

————————————————————

其他答主的回答已經基本上闡明了問題的解決方案,那麼我就來補一點參考文獻吧。

編譯原理:

經典的教材是龍虎鯨三大本。但是其中我記得有一本中有一個完整的C語言編譯器的實現(但是沒有垃圾回收)。龍書某種程度上太偏理論,稍微不推薦。

C編譯器剖析(清華大學出版社 鄒昌偉) 簡直國產良心。配合簡明易懂的UCC編譯器講解編譯原理,學著理論看著代碼豈不美滋滋。

編譯系統透視:圖解編譯原理 (機械工業出版社,新設計團隊) 此書分析gcc源代碼講解編譯原理,知乎評價褒貶不一,不過在我看來配圖真的超走心。

自製編譯器(青木蜂郎) 我沒詳細看過。此書用Java實現了一個Cb語言編譯器,評價貌似還不錯。

代碼資源

UCC : Your C Compiler,有相對完整的文檔,代碼一萬行左右,很容易看懂。百度下就能找到。

LCC : 國外牛人實現的可變目標C語言編譯器,代碼也比較少。但是縮寫用的太多而注釋太少,有的時候要揣度一下牛人的心思。

TCC : (Tiny C Compiler) 沒看過,據說也不錯,放在這裡作為參考。

GCC : (不推薦) 你還是不要嘗試看懂一個長達八頁,參數就有十一個的函數了。

LLVM : 如火如荼的語言後端解決方案。文檔可以在http://llvm.org獲取

我的試驗品zoost : http://github.com/ILoveChenKX/compilers-zoost

一個很簡單的語言,不過麻雀雖小五臟俱全,可能還是比較有借鑒意義的

以及其他幾位答主的成品語言(CovScript等


回答已刪除,說千說萬不如回去讀龍書。

具體實現步驟的話,自己去看源碼吧。Talk is cheap,答主應該反思下為什麼一個堂堂大學生連高中生能做出來的東西都不會做。


原答案已刪除,不屑與智障爭辯

好心勸解還遭嘲諷

5g還沒走出實驗室,就想「面向未來?」抱歉,已經有很多這樣的項目死掉了

還喪心病狂地想搞前後端大一統,哈哈哈哈哈哈哈哈哈哈,怕是你門都沒入哦

況且,很多專家都是窩在象牙塔中的理論派

答主你別不服氣,等你們這個項目做完了再來想想我說的話吧。

我什麼項目沒做過?

你還不想聽取一些人生的經驗?

噗哈哈哈哈哈哈哈哈哈哈這張圖我看一次笑一次


不要挖太大的坑。

用c/c++的標準代碼先用5000行實現個一個語言的核心。(就參照lua實現他的子集),達到圖靈完全之後再擴充庫。添加很酷的語法。

這樣就可以完美實現跨平台了。

千萬不要搞後端。


大致了解一下編譯原理的一些基本概念。知道詞法分析,語法分析,ast的基本原理就行了。

然後學習一下常用工具的用法,詞法分析生成器flex, 語法分析生成器bison。有這兩樣就可以開始定義自己的語法,完成從源碼到ast的轉換。

目標代碼生成可以用llvm。也可以自己將ast轉化成js或c的源碼。


做做前端就可以了


謝邀

讓我隨意是什麼意思?

我沒有 FreeStyle 啊


去看了編輯記錄和其它的答案

推薦去參考一下其他編譯器的實現吧

我是寫 Java 的

JVM 上有多種多樣的語言實現

Groovy Scala Kotlin 等等

(原來 Kotlin 是2011年的,已經不算新了

要不是評論小夥伴告訴我還不知道

所以把最新的形容詞去掉了)

而且 Java 是跨平台的,至少初衷是這樣的

這些語言也都各有特色,可能有幫助


用彙編從芯底層寫只是為了計算速度,高級語言用C或者C++就可以了。

而且程序語言的設計,其實更多是規定標準和開發功能,能在現有語言上搞出一兩個有用的功能或者特性就已經很不錯了。輪子哥就是寫編譯器的,他輪子造的蠻好,但也是按著規定造。寫語言是規定別人怎麼造輪子。

而且不同的數據類型,無非就是地址的分配方式和定址方式有所區別。很多語言都新類型的定義功能,實現起來也不是難事。

感覺你們就是在寫個編譯器,無非在標準庫裡面加了幾個新功能。

?_?


要支持跨平台,和互聯網軟體。你應該基於c/c++去設計類似於python的動態語言,或者類似於java的編譯型語言,而不是從彙編的層次上設計。

其次互聯網軟體的概念很寬泛,如果針對的目標很具體,那麼建議考慮的方向是實現某個語言的框架或者工具庫。


推薦閱讀:

如何解決代碼中難以重現的BUG?
習得一種編程語言後如何高效地學習其他語言?
一個簡單C語言編程問題?
iOS程序員的第二門語言選什麼?
目前有哪些計算機編程語言能(或者不能)自舉?

TAG:程序員 | 編程語言 | 編程 | 程序 |